使用fork函数父进程创造子进程,fork0的值为判断条件,当返回值=0,子进程暂停8秒,子进程退出。结束。返回值>0时,父进程开始waitpid()判断waitpid()的返回值,waitpid()返回值=0时,父进程暂停一秒,回到父进程waitpid(),如果waitpid返回值不为0,捕获子进程,退出。当fork()值<0时,结束。linux系统中,用C语言代码。
时间: 2024-03-16 20:44:25 浏览: 54
Linux中使用C语言的fork()函数创建子进程的实例教程
好的,以下就是对应的 C 语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
int status;
int fork0 = 5; // 判断条件,可以自己设定
pid = fork();
if (pid < 0) {
perror("fork error");
exit(1);
} else if (pid == 0) { // 子进程
sleep(8); // 暂停 8 秒
exit(0);
} else { // 父进程
while (fork0--) { // 循环判断条件
pid_t child = waitpid(pid, &status, WNOHANG); // 非阻塞等待子进程结束
if (child == pid) { // 子进程结束
printf("child process %d terminated\n", pid);
exit(0);
} else if (child < 0) { // 等待出错
perror("waitpid error");
exit(1);
} else { // 子进程还在运行
printf("child process %d still running\n", pid);
sleep(1); // 暂停 1 秒
}
}
printf("timeout, kill child process %d\n", pid);
kill(pid, SIGKILL); // 超时结束子进程
exit(0); // 退出
}
}
```
这个程序中,先使用 `fork()` 函数创建一个子进程,子进程暂停 8 秒后退出,父进程开始等待子进程结束。父进程使用 `waitpid()` 函数等待子进程结束,每等待一次就判断子进程是否结束,如果结束则退出程序;如果子进程还在运行,则暂停 1 秒后再次等待,直到等待超过一定次数,则结束子进程。在结束子进程之前,使用 `kill()` 函数发送 `SIGKILL` 信号给子进程,结束它的运行。
需要注意的是,在 `waitpid()` 函数中使用了 `WNOHANG` 参数,表示非阻塞等待子进程结束。如果不加这个参数,则 `waitpid()` 函数会一直阻塞直到子进程结束,这显然不符合我们的需求。
阅读全文