#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void handle_signal(int sigNum)
{
pid_t pid;
// 当用fork启动一个新的子进程的时候,子进程就有了新的生命周期,并将在其自己的地址空间内独立运行。
// 但有的时候,我们希望知道某一个自己创建的子进程何时结束,从而方便父进程做一些处理动作。
// pid_t waitpid(pid_t pid, int *status, int options);
// 如果在调用waitpid()函数时,当指定等待的子进程已经停止运行或结束了,
// 则waitpid()会立即返回;但是如果子进程还没有停止运行或结束,
// 则调用waitpid()函数的父进程则会被阻塞,暂停运行。
// WNOHANG:非阻塞模式
// 即使没有子进程退出,它也会立即返回
// -1:等待任何一个子进程退出
// 没有子进程退出时返回0
while ((pid = waitpid(-1, NULL, WNOHANG)) > 0)
{
printf ("处理了一个子进程退出信息,子进程的id = %d\n", pid);
}
}
// 处理子进程退出
int main()
{
// 子进程退出前向父进程发送SIGCHLD信号
signal(SIGCHLD, handle_signal);
int i;
for (i = 0; i < 10; i++)
{
pid_t pid = fork();
if (0 == pid)
{
break;
}
}
while (1);
return 0;
}
处理子进程退出
最新推荐文章于 2025-01-20 23:50:53 发布