COMMAND & 形式
- 前台進程變為後台進程。
- 如果不指定輸出重定向(例如:
COMMAND >out.log 2>&1 &),輸出仍然打印到前台。 - 退出 shell 會話(其父進程),進程會收到
HUP信號,從而退出。 - 在另一個 shell 會話向進程發送
INT信號,進程會退出。
總結:COMMAND & 形式僅僅將前台進程放在後台運行,但進程輸出仍打印在前台。並且,進程不會忽略任何信號。
nohup COMMAND 形式
- 前台進程不會變為後台進程。
- 如果不指定輸出重定向(例如:
nohup COMMAND >out.log 2>&1), 那麼標準輸出和標準錯誤都定向到了nohup.out文件中。 - 退出 shell 會話(其父進程),進程會收到
HUP信號,但進程免疫HUP信號,不會退出。 - 在進程前台按 Ctrl + C,或者在另一個 shell 會話向進程發送
INT信號,進程會退出。
總結:nohup COMMAND 形式僅僅使前台程序忽略 HUP 信號(退出 shell 時進程不會退出),並使進程標準輸出和標準錯誤重定向到 nohup.out 文件。
nohup COMMAND & 形式
上述兩種使用形式都不太能滿足作為後台進程運行的需求,所以 nohup 與 & 往往結合使用(nohup COMMAND &),其效果是:
- 進程在後台運行。
- 進程標準輸出和標準錯誤定向到
nohup.out文件。 - 進程會忽略
HUP信號,因此退出 shell 會話時,也不會退出。
另外,若想將進程輸出定向到其他文件,則可以使用 nohup COMMAND >/path/to/file 2>&1 & 。如果想忽略進程的輸出,則可以使用 nohup bin >/dev/null 2>&1 & 。