天天看點

#深入解析# linux中背景啟動程式 nohup 指令

簡單來說,

nohup

表示目前使用者和系統的會話下的程序忽略響應HUP消息,也就是不挂斷地運作指令。

下面結合一個具體指令進行分析:

nohup command>/dev/null 2>&1 &
           

首先對上述指令的幾個關鍵字進行解釋:

  • /dev/null

    表示空裝置檔案
  • &

    符号是把該指令以背景的job的形式運作。
  • 表示stdin标準輸入
  • 1

    表示stdout标準輸出
  • 2

    表示stderr标準錯誤輸出
  1. 其中

    /dev/null

    表示一個空裝置,而

    command>/dev/null

    等價于

    command 1>/dev/null

    (标準輸入

    1

    可以省略),表示把

    command

    的執行結果重定向到空裝置中,換句話說就是不顯示任何資訊
  2. 2>&1

    表示将stderr标準錯誤(

    2

    )重定向到 stdin标準輸入(

    1

    )上 ,(符号

    &

    怎麼了解都好,主要作用是差別

    2>&1

    2>1

    ,後者表示将标準錯誤輸出輸出到名為“1”的檔案中)
  3. 結合上述兩個操作,最後将所有輸出都重定向到了空裝置檔案中

再來一個示例:

nohup python -u main.py 2>&1 >log &
           

有了上邊的基礎,這裡就好了解了

這裡表示 将 main.py 檔案運作時輸出的内容(标準輸出和錯誤輸出)輸出到 名為 “log” 的檔案中,

這裡和上邊有兩點不同:

  1. 多了

    -u

    參數,

    -u

    是 python 編譯器的參數,python編譯器預設情況下将标準輸出預設需要緩存後再輸出到螢幕,而标準錯誤則直接列印到螢幕。使用 -u 參數後,python編譯器會将标準輸出和标準錯誤都直接列印到螢幕上。
  2. 上個示例中的

    /dev/null

    換成了

    log

    ,表示輸出到名為 “log” 的 檔案中

linux 中 nohup 和 & 關鍵字的差別請看這篇文章 ->#深入解析# linux 中 & 和 nohup 指令的差別