LinuxSir.cn,穿越时空的Linuxsir!

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

请帮忙解答一个问题,为什么第2个kill没有执行

[复制链接]
发表于 2004-5-6 11:03:55 | 显示全部楼层 |阅读模式
[php]
# include <signal.h>
static void sig_handler(int);
int main(void)
{
  int i,parent_pid,child_pid,status;

  if(signal(SIGUSR1,sig_handler)==SIG_ERR)
     printf("error");
  if(signal(SIGUSR2,sig_handler)==SIG_ERR)
     printf("error2");

  parent_pid=getpid();
  
  if((child_pid=fork())==0)
  {           //子进程
     kill(parent_pid,SIGUSR1);  //产生信号 给 parent_id
     for(;;) pause();    //??
  }
  else
  {
     kill(child_pid,SIGUSR2);              //为什么此句不执行?
     printf("arent: Terminating child ...");
     kill(child_pid,SIGTERM);
     wait(&status);
     printf("done\n");
  }
}

static void sig_handler(int signo)
{
   switch(signo)
   {
     case SIGUSR1:
       printf("arent:Received SIGUSR1 \n");
       break;
     case SIGUSR2:
       printf("Child:Received SIGUSR2 \n");
       break;
     default:break;
   }
   return;
}
[/php]
发表于 2004-5-6 17:19:16 | 显示全部楼层
当然不会执行啦,子进程都收到SIGTERM后还能做什么?
把kill(child_pid,SIGTERM); 注释掉后就没问题。如果不想这样做,也可以让SIGTERM延迟一会儿再发,在前面加一句sleep(1);吧。
btw: 下次发贴时请注意保持缩进,这次我给你改过来了,没有缩进的代码看得我头大!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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