为什么crontab会改变进程的信号句柄行为?

时间:2014-10-21 05:36:21

标签: c cron signals solaris crontab

以下是一个非常简单的C程序:

#include <stdio.h>

int main(void)
{
        sleep(100);
        return 0;
}

Solaris 10上构建并运行后,使用psig检查流程的信号行为:

bash-3.2# psig 21429
21429:  ./test
HUP     default
INT     default
QUIT    default
......
RTMAX   default

所有信号处理行为都是default,而且是正确的。

然后我在crontab

中配置程序
23 * * * * /data1/nan/test

当程序从crontab启动时,我使用psig再次检查信号行为:

bash-3.2# psig 21452
21452:  /data1/nan/test
HUP     ignored
INT     ignored
QUIT    ignored
......
TSTP    ignored
......
TTIN    ignored
TTOU    ignored
......

我发现某些信号行为已从default更改为ignored。我尝试从crontab手册中找到答案,但没有找到任何有价值的内容。

有些人可以提供一些关于这个问题的线索吗?非常感谢提前!

2 个答案:

答案 0 :(得分:1)

cron的子进程会从其父级cron继承信号处置。

fork(2)的Solaris手册页说:

  

子进程从父进程继承以下属性:

     
      
  • 信号处理设置(即SIG_DFL,SIG_IGN,          SIG_HOLD,功能地址)
  •   

答案 1 :(得分:1)

这很可能是由于fork()调用继承了信号处理。它不会从crontab继承(它实际上只是cron的管理界面),而是从cron本身继承。