当前位置: 技术问答>linux和unix
SIGCHLD信号的问题
来源: 互联网 发布时间:2015-10-13
本文导语: 循环创建50个子进程,然后捕获SIGCHLD信号,在sigchld里wait子进程。 为什么有的时候sigchld处理的次数少于50? 大概代码如下: signal(SIGCHLD,sigchld) ; int iChildPid4; int i; for( i=0; i 0) { printf( "iChildPid4 = %dn ", ...
循环创建50个子进程,然后捕获SIGCHLD信号,在sigchld里wait子进程。
为什么有的时候sigchld处理的次数少于50?
大概代码如下:
signal(SIGCHLD,sigchld) ;
int iChildPid4;
int i;
for( i=0; i 0)
{
printf( "iChildPid4 = %dn ", iChildPid4);
//printf ( "after child process 4 n" );
}
else
{
printf( "create child process4 errorn" );
}
}
void sigchld(int signo)
{
_iIn++;
printf("in is %dn", _iIn);
signal(signo, SIG_IGN);
signal(SIGCHLD, sigchld);
rv = wait( NULL);}
为什么有的时候sigchld处理的次数少于50?
大概代码如下:
signal(SIGCHLD,sigchld) ;
int iChildPid4;
int i;
for( i=0; i 0)
{
printf( "iChildPid4 = %dn ", iChildPid4);
//printf ( "after child process 4 n" );
}
else
{
printf( "create child process4 errorn" );
}
}
void sigchld(int signo)
{
_iIn++;
printf("in is %dn", _iIn);
signal(signo, SIG_IGN);
signal(SIGCHLD, sigchld);
rv = wait( NULL);}
|
可能是这个问题,SIGCHLD信号不支持排队。
建议用sigaction()测试。 而子进程另发稳定的SIGRTMIN以上的信号作测试。
建议用sigaction()测试。 而子进程另发稳定的SIGRTMIN以上的信号作测试。
|
是不是信号丢失了,试试下面的代码.
void sig_chld(int signo)
{
pid_t pid;
int stat;
while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
printf("child %d terminatedn", pid);
return;
}
void sig_chld(int signo)
{
pid_t pid;
int stat;
while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
printf("child %d terminatedn", pid);
return;
}
|
信号函数还没来得及处理,就被信号打断了,所以就.....