当前位置: 技术问答>linux和unix
子进程的退出的捕捉问题
来源: 互联网 发布时间:2015-04-22
本文导语: //一下程序怎么只能捕捉到第一个子进程的退出,后面的就无法捕捉到 //有什么办法 #include #include void add_fork(int signo) { pid_t pid; int stat; printf("退出进程n"); pid=waitpid(-1,&stat,WNOHANG); return; } main()...
//一下程序怎么只能捕捉到第一个子进程的退出,后面的就无法捕捉到
//有什么办法
#include
#include
void add_fork(int signo)
{
pid_t pid;
int stat;
printf("退出进程n");
pid=waitpid(-1,&stat,WNOHANG);
return;
}
main()
{
signal(SIGCHLD,add_fork);
while(1)
{
if (fork()==0)
{
printf("%d process run....",getpid());
sleep(4);
exit(0);
}
sleep(2);
}
}
//有什么办法
#include
#include
void add_fork(int signo)
{
pid_t pid;
int stat;
printf("退出进程n");
pid=waitpid(-1,&stat,WNOHANG);
return;
}
main()
{
signal(SIGCHLD,add_fork);
while(1)
{
if (fork()==0)
{
printf("%d process run....",getpid());
sleep(4);
exit(0);
}
sleep(2);
}
}
|
某些系统在产生信号后会删除注册的信号处理函数。在add_fork的return之前调用signal(SIGCHLD,add_fork); 试试。
|
在return 前加 :signal(SIGCHLD,add_fork);
|
fork 时保存所有子进程的pid, 然后用waitpid捕捉每个子进程的退出