2010-08-13 37 views

回答

2

source与你同在:)

Disclamer:这句话其实不是我,而是Marshall Kirk McKusick

+0

+1。如果删除所有附加处理,那基本上就是2行代码。 :) – casablanca 2010-08-13 22:23:45

2

nohup的根本exec的你给它忽略了HUP信号之后的命令。从源代码:

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

我假设这意味着,如果指定的命令不喜欢的东西:

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

的nohup将无法正常工作。

+0

有一个约定,程序应该留下仅在条目中被忽略的信号(并且不要为它们设置处理程序或默认操作)。 这个约定主要用于继承SIGINT和SIGQUIT的nohup和非作业控制背景(&)过程。 (使用setsid()和作业控制(独立进程组)等更多现代化设施,不需要继承信号,因为违规信号根本不会被发送。) – jilles 2010-08-13 22:45:15

+0

啊,这似乎是一个明智的约定。我无法想象为什么有人想将HUP重置为默认值,但我想我会指出这一点。 – cam 2010-08-13 22:54:42

相关问题