a question: about SIGCHLD, thanks

dreamer_shax 2011-06-02 06:32:42
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>/*fork()函数所在的头文件*/
#include <errno.h>
#include <dirent.h>
#include <setjmp.h>
#include<sys/resource.h>
#include<signal.h>

int i;

static void pri(int signo)
{
pid_t pid;
int status;

while( (pid = wait(&status))>0 )
printf("recevied sigchld,i = %d,pid = %d,status=%d\n",i,pid,status);
}

int main(int argc,char *argv[])
{
char c = 0;
pid_t pid;


signal(SIGCHLD,pri);

for(i=0;i<10;i++)
{
pid = fork();

if(pid==0)//child
{

exit(0);
}
else
{
printf("parent running,i=%d\n",i);

}
}



}


结果不可预见 ,一个例子 : 为什么后面几个信号会丢失

parent running,i=0
parent running,i=1
recevied sigchld,i = 2,pid = 13772,status=0
recevied sigchld,i = 2,pid = 13773,status=0
parent running,i=2
parent running,i=3
parent running,i=4
parent running,i=5
recevied sigchld,i = 6,pid = 13775,status=0
recevied sigchld,i = 6,pid = 13776,status=0
recevied sigchld,i = 6,pid = 13777,status=0
recevied sigchld,i = 6,pid = 13778,status=0
parent running,i=6
parent running,i=7
parent running,i=8
parent running,i=9
...全文
56 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2011-06-03
  • 打赏
  • 举报
回复
父进程结束的太快了吧
加一条sleep(1)看看

23,118

社区成员

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

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