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