2010-08-13 68 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

相關問題