编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有A—›B—›D,A—›C
时间: 2023-10-29 11:05:47 浏览: 191
举例讲解C语言的fork()函数创建子进程的用法
的进程关系,其中A为父进程,B和C为A的子进程,D为B的子进程。以下是示例代码:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid_b, pid_c, pid_d;
pid_b = fork(); // 创建B进程
if (pid_b < 0) {
fprintf(stderr, "Fork B failed\n");
return 1;
} else if (pid_b == 0) {
// 子进程B
printf("Process B (pid=%d) starts\n", getpid());
pid_d = fork(); // 创建D进程
if (pid_d < 0) {
fprintf(stderr, "Fork D failed\n");
return 1;
} else if (pid_d == 0) {
// 子进程D
printf("Process D (pid=%d) starts\n", getpid());
printf("Process D (pid=%d) ends\n", getpid());
} else {
// 父进程B
wait(NULL);
printf("Process B (pid=%d) ends\n", getpid());
}
} else {
pid_c = fork(); // 创建C进程
if (pid_c < 0) {
fprintf(stderr, "Fork C failed\n");
return 1;
} else if (pid_c == 0) {
// 子进程C
printf("Process C (pid=%d) starts\n", getpid());
printf("Process C (pid=%d) ends\n", getpid());
} else {
// 父进程A
wait(NULL);
wait(NULL);
printf("Process A (pid=%d) ends\n", getpid());
}
}
return 0;
}
```
程序运行时,会输出以下内容:
```
Process B (pid=1234) starts
Process D (pid=1236) starts
Process D (pid=1236) ends
Process B (pid=1234) ends
Process C (pid=1235) starts
Process C (pid=1235) ends
Process A (pid=1233) ends
```
其中,每个进程的PID会不同。
阅读全文