nohup命令用于運行程序或者命令,并忽略所有中斷信號SIGHUP。SIGHUP是當前控制終端關(guān)閉時發(fā)送到進程的信號。
通常,當您通過SSH運行命令時,如果連接斷開,或者退出SSH,SSH會話將終止在當前TTY啟動的進程。
如果你不想被某一程序被終止,可以使用nohup命令。它將忽略所有中斷信號,啟動的命令程序?qū)⒗^續(xù)運行。
nohup命令
nohup命令的語法形式是nohup COMMAND [ARGS]。nohup命令僅接受兩個選項--help和--version,除此之外沒有任何其它沒有任何選項。
nohup python3 -m http.server命令將會在前臺啟動Python的HTTP服務器,并將HTTP服務器進程的標準輸出重定向到nohup.out文件。
nohup.out文件創(chuàng)建在當前工作目錄中。如果運行nohup命令的用戶沒有當前工作目錄的讀寫權(quán)限,nohup.out文件寫到用戶的家目錄中。
nohup python3 -m http.server
nohup: ignoring input and appending output to 'nohup.out'
nohup 命令后臺運行
nohup在前臺使用不是很有用,因為在命令完成之前,您將無法在當前TTY交互。要使nohup啟動的進程在后臺運行,請在命令末尾添加&符號。
nohup python3 -m http.server &命令將在后臺運行Python的HTTP服務器,并在終端上打印作業(yè)ID和進程ID。
當nohup作業(yè)進入后臺運行后,如果你想將nohup的作業(yè)放在前臺運行,您可以運行fg命令并指定作業(yè)ID,讓作業(yè)在前臺運行。
如果由于某種原因需要終止進程,請使用kill命令后跟進程ID,例如命令kill -9 68823終止nohup命令啟動的進程68823。
nohup python3 -m http.server &
 kill -9 68823
[1] 68823
nohup: ignoring input and appending output to 'nohup.out
標準錯誤與標準輸出重定向
默認情況下,nohup會將標準輸出和標準錯誤重定向到nohup.out文件。如果要將命令標準輸出和標準錯誤重定向到其他文件,可以使用shell的重定向符號>。
例如命令nohup python3 -m http.server > log 2>&1 &將Python的HTTP服務器進程標準輸出和標準錯誤重定向到文件http.out并在后臺運行。
如果你需要分別重定向標準錯誤和標準輸出到不同文件,可以運行命令nohup python3 -m http.server > access.log 2> error.log &。
命令將會把Python的HTTP服務器進程標準輸出寫入文件access.log,標準錯誤寫入文件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是什么可以閱讀我們的教程標準輸入/標準輸出/標準錯誤詳解。
重定向標準輸出和標準錯誤/dev/null
/dev/null稱空設(shè)備文件。在類Unix系統(tǒng)中是一個特殊的設(shè)備文件,它丟棄一切寫入其中的數(shù)據(jù),但報告寫入操作成功,讀取它則會立即得到一個EOF。
我們經(jīng)常在使用nohup命令啟動進程時,將進程的標準輸出和標準錯誤寫入空設(shè)備文件/dev/null,來抑制所有的消息輸出。
例如命令nohup python3 -m http.server > /dev/null 2>&1 &將會標準輸出和標準錯誤都重定向到空設(shè)備文件。
nohup python3 -m http.server > /dev/null 2>&1 &
[1] 71816
結(jié)論
至此,您應該很好地理解如何使用nohup命令在后臺運行進程,以阻止在退出終端時終止進程。了解如何重定向標準錯誤和標準輸出。
- 
                                命令
                                +關(guān)注
關(guān)注
5文章
745瀏覽量
23382 - 
                                SSH
                                +關(guān)注
關(guān)注
0文章
197瀏覽量
17483 - 
                                進程
                                +關(guān)注
關(guān)注
0文章
208瀏覽量
14473 
發(fā)布評論請先 登錄
如何在Linux命令行中終止進程
Linux命令:screen
遠程執(zhí)行后臺程序問題
前臺運行和后臺運行二者有何區(qū)別
HarmonyOS判斷服務是否在后臺運行的方法
Linux和UNIX可以用什么命令查看運行中進程的相關(guān)信息
你了解過Linux后臺服務進程的開發(fā)過程?
Linux實現(xiàn)前后臺切換的命令
Linux操作系統(tǒng)后臺:&與nohup的執(zhí)行命令用法
    
Linux中的kill 和 killall 命令介紹
Linux之screen命令
Linux后臺進程管理詳解
    
          
        
        
如何使用nohup命令在后臺運行進程
                
 
           
            
            
                
            
評論