nohup
命令用于運(yùn)行程序或者命令,并忽略所有中斷信號(hào)SIGHUP
。SIGHUP
是當(dāng)前控制終端關(guān)閉時(shí)發(fā)送到進(jìn)程的信號(hào)。
通常,當(dāng)您通過SSH運(yùn)行命令時(shí),如果連接斷開,或者退出SSH,SSH會(huì)話將終止在當(dāng)前TTY啟動(dòng)的進(jìn)程。
如果你不想被某一程序被終止,可以使用nohup
命令。它將忽略所有中斷信號(hào),啟動(dòng)的命令程序?qū)⒗^續(xù)運(yùn)行。
nohup命令
nohup
命令的語法形式是nohup COMMAND [ARGS]
。nohup
命令僅接受兩個(gè)選項(xiàng)--help
和--version
,除此之外沒有任何其它沒有任何選項(xiàng)。
nohup python3 -m http.server
命令將會(huì)在前臺(tái)啟動(dòng)Python的HTTP服務(wù)器,并將HTTP服務(wù)器進(jìn)程的標(biāo)準(zhǔn)輸出重定向到nohup.out
文件。
nohup.out
文件創(chuàng)建在當(dāng)前工作目錄中。如果運(yùn)行nohup
命令的用戶沒有當(dāng)前工作目錄的讀寫權(quán)限,nohup.out
文件寫到用戶的家目錄中。
nohup python3 -m http.server
nohup: ignoring input and appending output to 'nohup.out'
nohup 命令后臺(tái)運(yùn)行
nohup
在前臺(tái)使用不是很有用,因?yàn)樵诿钔瓿芍?,您將無法在當(dāng)前TTY交互。要使nohup
啟動(dòng)的進(jìn)程在后臺(tái)運(yùn)行,請?jiān)诿钅┪蔡砑?code>&符號(hào)。
nohup python3 -m http.server &
命令將在后臺(tái)運(yùn)行Python的HTTP服務(wù)器,并在終端上打印作業(yè)ID和進(jìn)程ID。
當(dāng)nohup作業(yè)進(jìn)入后臺(tái)運(yùn)行后,如果你想將nohup的作業(yè)放在前臺(tái)運(yùn)行,您可以運(yùn)行fg
命令并指定作業(yè)ID,讓作業(yè)在前臺(tái)運(yùn)行。
如果由于某種原因需要終止進(jìn)程,請使用kill
命令后跟進(jìn)程ID,例如命令kill -9 68823
終止nohup命令啟動(dòng)的進(jìn)程68823。
nohup python3 -m http.server &
kill -9 68823
[1] 68823
nohup: ignoring input and appending output to 'nohup.out
標(biāo)準(zhǔn)錯(cuò)誤與標(biāo)準(zhǔn)輸出重定向
默認(rèn)情況下,nohup
會(huì)將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向到nohup.out
文件。如果要將命令標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向到其他文件,可以使用shell的重定向符號(hào)>
。
例如命令nohup python3 -m http.server > log 2>&1 &
將Python的HTTP服務(wù)器進(jìn)程標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向到文件http.out
并在后臺(tái)運(yùn)行。
如果你需要分別重定向標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出到不同文件,可以運(yùn)行命令nohup python3 -m http.server > access.log 2> error.log &
。
命令將會(huì)把Python的HTTP服務(wù)器進(jìn)程標(biāo)準(zhǔn)輸出寫入文件access.log
,標(biāo)準(zhǔn)錯(cuò)誤寫入文件error.log
。
nohup python3 -m http.server > log 2>&1 &
nohup python3 -m http.server > access.log 2> error.log &
[1] 71816
如果你想知道命令access.log 2> error.log
和> log 2>&1
有什么不同或者2>&1是什么可以閱讀我們的教程標(biāo)準(zhǔn)輸入/標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤詳解。
重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤/dev/null
/dev/null稱空設(shè)備文件。在類Unix系統(tǒng)中是一個(gè)特殊的設(shè)備文件,它丟棄一切寫入其中的數(shù)據(jù),但報(bào)告寫入操作成功,讀取它則會(huì)立即得到一個(gè)EOF。
我們經(jīng)常在使用nohup命令啟動(dòng)進(jìn)程時(shí),將進(jìn)程的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤寫入空設(shè)備文件/dev/null,來抑制所有的消息輸出。
例如命令nohup python3 -m http.server > /dev/null 2>&1 &
將會(huì)標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都重定向到空設(shè)備文件。
nohup python3 -m http.server > /dev/null 2>&1 &
[1] 71816
結(jié)論
至此,您應(yīng)該很好地理解如何使用nohup
命令在后臺(tái)運(yùn)行進(jìn)程,以阻止在退出終端時(shí)終止進(jìn)程。了解如何重定向標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出。
-
命令
+關(guān)注
關(guān)注
5文章
685瀏覽量
22044 -
SSH
+關(guān)注
關(guān)注
0文章
189瀏覽量
16351 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
203瀏覽量
13963
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論