Linux/Unix下,通常只有守護進程可在脫離終端的情況下能繼續執行,而普通進程在關閉終端時會因收到SIGHUP信號(掛起信號)而退出。當終端退出後,由該終端啟動的後台程序自動退出。
若想命令在後台運行,則可用 & 指定命令在後台運行;
若想終端退出後程序不停止運行,則可用nohup命令啟動後台程序。
nohup(=no hang up),使命令忽略SIGHUP信號;
[語法] nohup Command [ Arg ... ] [&]
[命令輸出說明]
Command 的輸出如果沒有被重定向,則無論是標准輸出(stdout),還是標准錯誤(stderr),均重定向到nohup.out文件;nohup.out文件缺省寫在當前目錄下,如果在該目錄下無寫權限,則試圖寫到$HOME/nohup.out中,如果仍然失敗,整個命令執行失敗;
Command的輸出如果重定向,則寫入指定的重定向文件中;
[退出狀態]
126 能查找但不能調用 Command 命令;
127 nohup 命令發生錯誤或找不到 Command 命令;
否則為 Command 命令的退出狀態;
nohup與&的區別:
nohup只是讓命令忽略SIGHUP命令而已;
&則讓命令在後台運行;
至於該命令是否能在脫離終端後繼續執行則要看進程是否是守護進程,如果不是,則需要nohup來幫忙;
PS,引用 http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html
---------以下為引用內容
他是在當shell中提示了nohup成功後還需要按終端上鍵盤任意鍵退回到shell輸入命令窗口,然後通過在shell中輸入exit來退出終端;而我是每次在nohup執行成功後直接點關閉程序按鈕關閉終端.。所以這時候會斷掉該命令所對應的session,導致nohup對應的進程被通知需要一起shutdown。
這個細節有人和我一樣沒注意到,所以在這兒記錄一下了。