LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 934|回复: 1

如果有多个SIGCHLD信号同时产生,中断函数只处理第一个,丢掉其余

[复制链接]
发表于 2006-2-12 14:50:40 | 显示全部楼层 |阅读模式
今天在一本旧书上看到,怀疑已经过时,结果一试还真是这样
[php]
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>

void
sigproc (int sig)
{
  printf ("singal child %d\n", waitpid (-1, NULL, WNOHANG));
}

main ()
{
  signal (SIGCHLD, sigproc);
  int i;

  for (i = 0; i < 2; i++)
    if (fork () == 0) {
      sleep (1);
      printf ("child %d\n", getpid ());
      exit (0);
    }

  while (1);
}
[/php]
结果显示:
child 3311
child 3312
singal child 3311
发表于 2006-2-14 09:44:06 | 显示全部楼层
  1. #include <signal.h>
  2. #include <sys/types.h>
  3. #include <sys/wait.h>
  4. #include <unistd.h>
  5. void sigproc (int sig)
  6. {
  7.         pid_t    pid;
  8.         int      stat;
  9.         while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
  10.                 printf("child %d terminated\n", pid);
  11.         return;
  12.         //printf ("singal child %d\n", waitpid (-1, NULL, WNOHANG));
  13. }
  14. int main ()
  15. {
  16.         signal (SIGCHLD, sigproc);
  17.         int i;
  18.         for (i = 0; i < 2; i++)
  19.                 if (fork () == 0) {
  20.                         sleep (1);
  21.                         printf ("child %d\n", getpid ());
  22.                         exit (0);
  23.                 }
  24.         while (1);
  25. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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