簡單來說,
nohup
表示目前使用者和系統的會話下的程序忽略響應HUP消息,也就是不挂斷地運作指令。
下面結合一個具體指令進行分析:
nohup command>/dev/null 2>&1 &
首先對上述指令的幾個關鍵字進行解釋:
-
表示空裝置檔案/dev/null
-
符号是把該指令以背景的job的形式運作。&
- 表示stdin标準輸入
-
表示stdout标準輸出1
-
表示stderr标準錯誤輸出2
- 其中
表示一個空裝置,而/dev/null
等價于command>/dev/null
(标準輸入command 1>/dev/null
可以省略),表示把1
的執行結果重定向到空裝置中,換句話說就是不顯示任何資訊command
- 而
表示将stderr标準錯誤(2>&1
)重定向到 stdin标準輸入(2
)上 ,(符号1
怎麼了解都好,主要作用是差別&
和2>&1
,後者表示将标準錯誤輸出輸出到名為“1”的檔案中)2>1
- 結合上述兩個操作,最後将所有輸出都重定向到了空裝置檔案中
再來一個示例:
nohup python -u main.py 2>&1 >log &
有了上邊的基礎,這裡就好了解了
這裡表示 将 main.py 檔案運作時輸出的内容(标準輸出和錯誤輸出)輸出到 名為 “log” 的檔案中,
這裡和上邊有兩點不同:
- 多了
參數,-u
是 python 編譯器的參數,python編譯器預設情況下将标準輸出預設需要緩存後再輸出到螢幕,而标準錯誤則直接列印到螢幕。使用 -u 參數後,python編譯器會将标準輸出和标準錯誤都直接列印到螢幕上。-u
- 上個示例中的
換成了/dev/null
,表示輸出到名為 “log” 的 檔案中log
linux 中 nohup 和 & 關鍵字的差別請看這篇文章 ->#深入解析# linux 中 & 和 nohup 指令的差別