|
主程序创建了10个子进程,利用signal避免僵尸进程,但运行发现还是
有几个进程成为了僵尸进程,但如果不注销*****处的sleep()函数,就
可以避免僵尸进程,为什么?难道是子进程的退出太快了,处理不过来
以至信号丢失?
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <iostream>
using namespace std;
void signal_child_process_exit(int )
{
pid_t PID;
PID=wait((int *)0);
cout<<"child :"<<PID<<" exit"<<endl;
return;
}
int main(int argc,char * argv[],char * env[])
{
struct sigaction child_sig;
memset(&child_sig,0,sizeof(child_sig));
child_sig.sa_handler=&signal_child_process_exit;
sigaction(SIGCHLD,&child_sig,NULL);
pid_t PID;
for (int i=0;i<10;++i) {
cout<<"fork a process"<<endl;
PID=fork();
if (0==PID) {
// sleep(i); //*****
break;
}
}
if (0==PID) {
cout<<"I am a child process:"<<getpid()<<endl;
exit(0);
}
for ( ; ; );
cout<<"I am parent process:"<<getpid()<<endl;
} |
|