个父进程创建一个子进程,子进程又创建一个子子进程(孙进程),分别作出等待的情况和不等待的情况。用C语言编程实现代码
时间: 2024-03-06 09:46:57 浏览: 171
C例子:父进程与子进程
以下是一个简单的C语言程序,展示了如何创建一个子进程和孙进程,并且演示了等待和不等待的情况。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int pid1, pid2, status;
// 创建子进程1
pid1 = fork();
if (pid1 == 0) {
// 子进程1
printf("Child process 1 with PID %d created.\n", getpid());
// 创建孙进程
pid2 = fork();
if (pid2 == 0) {
// 孙进程
printf("Grandchild process with PID %d created.\n", getpid());
sleep(5);
printf("Grandchild process with PID %d finished.\n", getpid());
exit(0);
} else {
// 子进程1继续执行
printf("Child process 1 with PID %d waiting for grandchild process %d.\n", getpid(), pid2);
waitpid(pid2, &status, 0);
printf("Child process 1 with PID %d finished.\n", getpid());
exit(0);
}
} else {
// 父进程
printf("Parent process with PID %d created child process %d.\n", getpid(), pid1);
printf("Parent process with PID %d does not wait for child process %d.\n", getpid(), pid1);
}
return 0;
}
```
在上面的程序中,我们首先创建了一个子进程1,它又创建了一个孙进程。然后我们展示了两种情况:
1. 等待孙进程:在子进程1中,我们使用了 `waitpid()` 函数等待孙进程的完成。这意味着子进程1将会等待孙进程完成后才会退出。
2. 不等待孙进程:在父进程中,我们没有使用任何等待函数,这意味着父进程将不会等待子进程1的完成,而是直接退出。
你可以根据需要修改程序,比如添加更多进程或者改变等待的时机。
阅读全文