以下是一个非常简单的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
手册中找到答案,但没有找到任何有价值的内容。
有些人可以提供一些关于这个问题的线索吗?非常感谢提前!
答案 0 :(得分:1)
cron
的子进程会从其父级cron
继承信号处置。
fork(2)
的Solaris手册页说:
子进程从父进程继承以下属性:
- 信号处理设置(即SIG_DFL,SIG_IGN, SIG_HOLD,功能地址)
答案 1 :(得分:1)
这很可能是由于fork()
调用继承了信号处理。它不会从crontab
继承(它实际上只是cron
的管理界面),而是从cron
本身继承。