是否可以在另一个进程中更改信号处理程序?

时间:2010-08-13 22:11:58

标签: unix signals

我今天发现了nohup工具,并且想知道它的实现。具体来说,似乎必须有一种方法可以告诉另一个进程或子进程忽略某些信号。是否有系统调用,或类似的东西,这样做?

3 个答案:

答案 0 :(得分:2)

source可能与你同在:)

Disclamer:这句话实际上不是我的,而是Marshall Kirk McKusick

答案 1 :(得分:2)

nohup只是exec忽略HUP信号后给出的命令。来自源代码:

signal (SIGHUP, SIG_IGN);
/* skipping some stuff ... */
execvp (*cmd, cmd);

我假设这意味着如果指定的命令执行了类似的操作:

signal (SIGHUP, SIG_DFL);  /* restore default HUP signal handler */

nohup无法正常工作。

答案 2 :(得分:0)

进程在exec调用后保留信号掩码。

请参阅此处的nohup来源,例如:

http://www.opensource.apple.com/source/shell_cmds/shell_cmds-118/nohup/nohup.c

有关exec()调用的详细信息,请参阅此处:

http://www.opengroup.org/onlinepubs/009695399/functions/exec.html

即:

  

新流程至少应继承   来自的以下属性   调用过程映像:

     

...过程信号掩码(见   sigprocmask()执行)