SIGCHLD信号的问题

zxcdewq 2005-07-25 04:21:38
循环创建50个子进程,然后捕获SIGCHLD信号,在sigchld里wait子进程。
为什么有的时候sigchld处理的次数少于50?

大概代码如下:

signal(SIGCHLD,sigchld) ;

int iChildPid4;

int i;
for( i=0; i<50; i++)
{
if( (iChildPid4 = fork() ) == 0 )
{
printf( "create %d.\n", i);

exit(0);
}
else if( iChildPid4 > 0)
{
printf( "iChildPid4 = %d\n ", iChildPid4);
//printf ( "after child process 4 \n" );
}
else
{
printf( "create child process4 error\n" );
}
}



void sigchld(int signo)
{
_iIn++;
printf("in is %d\n", _iIn);

signal(signo, SIG_IGN);
signal(SIGCHLD, sigchld);


rv = wait( NULL);}
...全文
436 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
daemeon 2005-08-08
是不是信号丢失了,试试下面的代码.
void sig_chld(int signo)
{
pid_t pid;
int stat;
while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
printf("child %d terminated\n", pid);
return;
}
回复
zhshj 2005-08-08
信号函数还没来得及处理,就被信号打断了,所以就.....
回复
yyy790601 2005-07-25
可能是这个问题,SIGCHLD信号不支持排队。
建议用sigaction()测试。 而子进程另发稳定的SIGRTMIN以上的信号作测试。
回复
相关推荐
发帖
Linux/Unix社区
创建于2007-08-27

2.0w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2005-07-25 04:21
社区公告
暂无公告