动态

详情 返回 返回

Linux 系統下如何將前台應用作為後台進程運行:nohup 與 & 命令的使用 - 动态 详情

COMMAND & 形式

  1. 前台進程變為後台進程。
  2. 如果不指定輸出重定向(例如:COMMAND >out.log 2>&1 &),輸出仍然打印到前台。
  3. 退出 shell 會話(其父進程),進程會收到 HUP 信號,從而退出。
  4. 在另一個 shell 會話向進程發送 INT 信號,進程會退出。

總結:COMMAND & 形式僅僅將前台進程放在後台運行,但進程輸出仍打印在前台。並且,進程不會忽略任何信號。

nohup COMMAND 形式

  1. 前台進程不會變為後台進程。
  2. 如果不指定輸出重定向(例如:nohup COMMAND >out.log 2>&1), 那麼標準輸出和標準錯誤都定向到了 nohup.out 文件中。
  3. 退出 shell 會話(其父進程),進程會收到 HUP 信號,但進程免疫 HUP 信號,不會退出。
  4. 在進程前台按 Ctrl + C,或者在另一個 shell 會話向進程發送 INT 信號,進程會退出。

總結:nohup COMMAND 形式僅僅使前台程序忽略 HUP 信號(退出 shell 時進程不會退出),並使進程標準輸出和標準錯誤重定向到 nohup.out 文件。

nohup COMMAND & 形式

上述兩種使用形式都不太能滿足作為後台進程運行的需求,所以 nohup& 往往結合使用(nohup COMMAND &),其效果是:

  1. 進程在後台運行。
  2. 進程標準輸出和標準錯誤定向到 nohup.out 文件。
  3. 進程會忽略 HUP 信號,因此退出 shell 會話時,也不會退出。

另外,若想將進程輸出定向到其他文件,則可以使用 nohup COMMAND >/path/to/file 2>&1 & 。如果想忽略進程的輸出,則可以使用 nohup bin >/dev/null 2>&1 &

Add a new 评论

Some HTML is okay.