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);}
...全文
486 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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以上的信号作测试。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧