LinuxSir.cn,穿越时空的Linuxsir!

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

怎样只保护父进程不被信号打断,而允许子进程可以被信号打断?

[复制链接]
发表于 2006-2-15 12:05:12 | 显示全部楼层 |阅读模式
怎样只保护父进程不被信号打断,而允许子进程可以被信号打断?
如下程序:
[php]
pid_t pid_buf;
fun()
{
  pid_t pid;
  sigset_t sig, oldsig;
  sigfillset (&sig);
  sigprocmask (SIG_BLOCK, &sig, &oldsig);
  pid = fork ();
  if (pid == -1)
    {
     perror ("fork");
     exit (-1);
     }
  else if (pid == 0)
    {  //child
     ...
     }
  else
    {  // parent
     pid_buf = pid;
     }
  sigprocmask (SIG_SETMASK, &oldsig, NULL);
}
[/php]
结果子进程也被保护起来,不被任何信号所打断。
发表于 2006-2-15 14:37:52 | 显示全部楼层
用clone,clone创建的子进程可以拥有自己的信号处理函数,而不必共享父进程的。
请man clone一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-15 16:25:01 | 显示全部楼层
[php]
pid_t pid_buf;
fun()
{
  pid_t pid;
  sigset_t sig, oldsig;
  sigfillset (&sig);
  sigprocmask (SIG_BLOCK, &sig, &oldsig);
  pid = fork ();
  if (pid == -1)
    {
     perror ("fork");
     exit (-1);
     }
  else if (pid == 0)
    {  //child
     sigprocmask (SIG_SETMASK, &oldsig, NULL);
     child进程代码;     
     }
  else
    {  // parent
     pid_buf = pid;
     sigprocmask (SIG_SETMASK, &oldsig, NULL);
     }
}
[/php]
这样做不行,为什么?
回复 支持 反对

使用道具 举报

发表于 2006-2-16 09:01:56 | 显示全部楼层
因为fork创建的子进程共享父进程的信号处理函数。
回复 支持 反对

使用道具 举报

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

本版积分规则

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