0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用nohup命令在后臺運(yùn)行進(jìn)程

CHANBAEK ? 來源:myfreax ? 作者:myfreax ? 2022-12-05 16:25 ? 次閱讀

nohup命令用于運(yùn)行程序或者命令,并忽略所有中斷信號SIGHUP。SIGHUP是當(dāng)前控制終端關(guān)閉時發(fā)送到進(jìn)程的信號。

通常,當(dāng)您通過SSH運(yùn)行命令時,如果連接斷開,或者退出SSH,SSH會話將終止在當(dāng)前TTY啟動的進(jìn)程。

如果你不想被某一程序被終止,可以使用nohup命令。它將忽略所有中斷信號,啟動的命令程序?qū)⒗^續(xù)運(yùn)行。

nohup命令

nohup命令的語法形式是nohup COMMAND [ARGS]。nohup命令僅接受兩個選項(xiàng)--help--version,除此之外沒有任何其它沒有任何選項(xiàng)。

nohup python3 -m http.server命令將會在前臺啟動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 命令后臺運(yùn)行

nohup在前臺使用不是很有用,因?yàn)樵诿钔瓿芍?,您將無法在當(dāng)前TTY交互。要使nohup啟動的進(jìn)程在后臺運(yùn)行,請?jiān)诿钅┪蔡砑?code>&符號。

nohup python3 -m http.server &命令將在后臺運(yùn)行Python的HTTP服務(wù)器,并在終端上打印作業(yè)ID和進(jìn)程ID。

當(dāng)nohup作業(yè)進(jìn)入后臺運(yùn)行后,如果你想將nohup的作業(yè)放在前臺運(yùn)行,您可以運(yùn)行fg命令并指定作業(yè)ID,讓作業(yè)在前臺運(yùn)行。

如果由于某種原因需要終止進(jìn)程,請使用kill命令后跟進(jìn)程ID,例如命令kill -9 68823終止nohup命令啟動的進(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)錯誤與標(biāo)準(zhǔn)輸出重定向

默認(rèn)情況下,nohup會將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤重定向到nohup.out文件。如果要將命令標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤重定向到其他文件,可以使用shell的重定向符號>。

例如命令nohup python3 -m http.server > log 2>&1 &將Python的HTTP服務(wù)器進(jìn)程標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤重定向到文件http.out并在后臺運(yùn)行。

如果你需要分別重定向標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出到不同文件,可以運(yùn)行命令nohup python3 -m http.server > access.log 2> error.log &。

命令將會把Python的HTTP服務(wù)器進(jìn)程標(biāo)準(zhǔn)輸出寫入文件access.log,標(biāo)準(zhǔn)錯誤寫入文件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)錯誤詳解。

重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤/dev/null

/dev/null稱空設(shè)備文件。在類Unix系統(tǒng)中是一個特殊的設(shè)備文件,它丟棄一切寫入其中的數(shù)據(jù),但報告寫入操作成功,讀取它則會立即得到一個EOF。

我們經(jīng)常在使用nohup命令啟動進(jìn)程時,將進(jìn)程的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤寫入空設(shè)備文件/dev/null,來抑制所有的消息輸出。

例如命令nohup python3 -m http.server > /dev/null 2>&1 &將會標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤都重定向到空設(shè)備文件。

nohup python3 -m http.server > /dev/null 2>&1 &
[1] 71816

結(jié)論

至此,您應(yīng)該很好地理解如何使用nohup命令在后臺運(yùn)行進(jìn)程,以阻止在退出終端時終止進(jìn)程。了解如何重定向標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    678

    瀏覽量

    21965
  • SSH
    SSH
    +關(guān)注

    關(guān)注

    0

    文章

    185

    瀏覽量

    16283
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    201

    瀏覽量

    13938
收藏 人收藏

    評論

    相關(guān)推薦

    如何在Linux命令行中終止進(jìn)程

    如果進(jìn)程在前臺運(yùn)行,你可以使用 Ctrl+C 終端快捷方式。但是,如果進(jìn)程不可見(在后臺運(yùn)行),你可以使用專用
    發(fā)表于 09-20 11:07 ?1201次閱讀

    Linux命令:screen

    可以保持在后臺持續(xù)運(yùn)行,不會因?yàn)閟sh client斷開而結(jié)束,所以screen也常用來在后臺掛服務(wù)端程序(與nohup類似)。
    發(fā)表于 12-05 11:11 ?6812次閱讀

    后臺運(yùn)行vi

    運(yùn)行時隱藏在后臺運(yùn)行
    發(fā)表于 06-09 14:32

    nohup命令后臺運(yùn)行程序的用途和語法

    nohup命令后臺運(yùn)行程序
    發(fā)表于 04-19 10:34

    遠(yuǎn)程執(zhí)行后臺程序問題

    大佬們,我linux ssh遠(yuǎn)程后臺執(zhí)行一個jar 退出終端程序就掉了,使用的命令nohup java路徑 -jar jar程序 &退出終端后仍然程序掛掉。使用nohup java路
    發(fā)表于 11-11 15:59

    前臺運(yùn)行后臺運(yùn)行二者有何區(qū)別

    開發(fā)環(huán)境:DeepIn15.11 開發(fā)語言:C語言 測試軟件:Final Shell3.0.10 目錄分清你的程序是前臺運(yùn)行還是后臺運(yùn)行,二者有何區(qū)別 前臺運(yùn)行
    發(fā)表于 11-04 08:18

    HarmonyOS判斷服務(wù)是否在后臺運(yùn)行的方法

    是否在后臺運(yùn)行,代碼如下package com.newdemo.myapplication.slice;import com.newdemo.myapplication.MyApplication
    發(fā)表于 06-17 09:46

    Linux和UNIX可以用什么命令查看運(yùn)行進(jìn)程的相關(guān)信息

      你可以使用ps命令。它能顯示當(dāng)前運(yùn)行進(jìn)程的相關(guān)信息,包括進(jìn)程的PID。Linux和UNIX都支持ps命令,顯示所有
    發(fā)表于 01-20 09:42 ?6445次閱讀

    你了解過Linux后臺服務(wù)進(jìn)程的開發(fā)過程?

    守護(hù)進(jìn)程(Daemon)是運(yùn)行在后臺的一種特殊進(jìn)程。它獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程是一種很有用的進(jìn)程
    發(fā)表于 05-13 09:21 ?1898次閱讀

    Linux 后臺運(yùn)行程序

    任務(wù)可以對應(yīng)于一個或者多個進(jìn)程號。&如果需要在后臺運(yùn)行一個進(jìn)程,可以在運(yùn)行命令后邊加上?&。這
    發(fā)表于 04-02 14:41 ?765次閱讀

    Linux實(shí)現(xiàn)前后臺切換的命令

    如果后臺中有多個命令,可以用 fg %jobnumber將選中的命令調(diào)出,%jobnumber是通過jobs命令查到的后臺正在執(zhí)行的
    的頭像 發(fā)表于 10-03 13:14 ?1826次閱讀

    Linux操作系統(tǒng)后臺:&與nohup的執(zhí)行命令用法

    大家可能有這樣的體驗(yàn):某個程序運(yùn)行的時候,會產(chǎn)生大量的log,但實(shí)際上我們只想讓它跑一下而已,log暫時不需要或者后面才有需要。所以在這樣的情況下,我們希望程序能夠在后臺進(jìn)行,也就是說,在終端上我們看不到它所打出的log。為了實(shí)現(xiàn)這個需求,我們介紹以下幾種方法。
    的頭像 發(fā)表于 10-08 11:46 ?1422次閱讀
    Linux操作系統(tǒng)<b class='flag-5'>后臺</b>:&與<b class='flag-5'>nohup</b>的執(zhí)行<b class='flag-5'>命令</b>用法

    pidof命令:用于查找指定名稱進(jìn)程進(jìn)程ID

    1.命令簡介 pidof 命令用于查找指定名稱進(jìn)程進(jìn)程ID,是命令 killall5 的一個軟鏈接。 找出
    的頭像 發(fā)表于 02-02 14:16 ?3105次閱讀
    pidof<b class='flag-5'>命令</b>:用于查找指定名稱<b class='flag-5'>進(jìn)程</b>的<b class='flag-5'>進(jìn)程</b>ID

    Linux中的kill 和 killall 命令介紹

    如果進(jìn)程在前臺運(yùn)行,你可以使用 Ctrl+C 終端快捷方式。但是,如果進(jìn)程不可見(在后臺運(yùn)行),你可以使用專用
    的頭像 發(fā)表于 10-09 10:27 ?3188次閱讀

    Linux之screen命令

    可以保持在后臺持續(xù)運(yùn)行,不會因?yàn)閟sh client斷開而結(jié)束,所以screen也常用來在后臺掛服務(wù)端程序(與nohup類似)。
    的頭像 發(fā)表于 05-05 14:29 ?976次閱讀