QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 939|回复: 0

僵尸进程为何不能消除

[复制链接]
发表于 2003-1-10 17:12:22 | 显示全部楼层 |阅读模式
主程序创建了10个子进程,利用signal避免僵尸进程,但运行发现还是

有几个进程成为了僵尸进程,但如果不注销*****处的sleep()函数,就

可以避免僵尸进程,为什么?难道是子进程的退出太快了,处理不过来

以至信号丢失?

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include &lt;string.h&gt;
#include &lt;signal.h&gt;
#include <iostream>
using namespace std;

void signal_child_process_exit(int )
{
pid_t PID;
PID=wait((int *)0);
cout&lt;&lt;"child :"&lt;&lt;PID&lt;&lt;" exit"&lt;&lt;endl;
return;
}

int main(int argc,char * argv[],char * env[])
{
struct sigaction child_sig;
memset(&amp;child_sig,0,sizeof(child_sig));
child_sig.sa_handler=&amp;signal_child_process_exit;
sigaction(SIGCHLD,&amp;child_sig,NULL);
pid_t PID;
for (int i=0;i&lt;10;++i) {
cout&lt;&lt;"fork a process"&lt;&lt;endl;
PID=fork();
if (0==PID) {
// sleep(i); //*****
break;
}
}
if (0==PID) {
cout&lt;&lt;"I am a child process:"&lt;&lt;getpid()&lt;&lt;endl;
exit(0);
}
for ( ; ; );
cout&lt;&lt;"I am parent process:"&lt;&lt;getpid()&lt;&lt;endl;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 14:36 , Processed in 0.050653 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表