父进程创建子进程,子进程在暂停8s之后退出,父进程用如图非阻塞方式等待子进程的退出,待收集到进程结束的信息,父进程就返回。
时间: 2024-03-09 15:47:09 浏览: 63
好的,下面是一段示例代码,实现了父进程创建子进程,子进程暂停8秒后退出,父进程使用非阻塞方式等待子进程的退出,待收集到进程结束的信息,父进程就返回。
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int status;
pid = fork(); // 创建子进程
if (pid < 0) // 创建子进程失败
{
printf("Error: fork failed.\n");
exit(1);
}
else if (pid == 0) // 子进程
{
sleep(8); // 暂停8秒后退出
exit(0);
}
else // 父进程
{
while (waitpid(pid, &status, WNOHANG) == 0) // 非阻塞方式等待子进程退出
{
printf("Parent process is waiting for child process to exit...\n");
sleep(1);
}
if (WIFEXITED(status)) // 子进程正常退出
printf("Child process exited with status: %d.\n", WEXITSTATUS(status));
else if (WIFSIGNALED(status)) // 子进程被信号终止
printf("Child process exited due to signal: %d.\n", WTERMSIG(status));
printf("Parent process exits.\n");
exit(0);
}
return 0;
}
```
在该示例代码中,父进程使用waitpid()函数非阻塞地等待子进程退出,并且在等待过程中每隔1秒输出一条提示信息。当waitpid()函数返回时,通过WIFEXITED()和WIFSIGNALED()函数判断子进程是正常退出还是被信号终止,然后输出相应的信息。最后,父进程退出。
阅读全文