1. 程式人生 > 其它 >Linux-nohup和&用法

Linux-nohup和&用法

nohup和&用法

目錄

簡介

  • nohup 是 no hang up 的縮寫,意思是不掛斷執行(指退出賬號),永久執行下去,但是注意並沒有後臺執行的功能。

  • & 是在後臺執行的意思

nohup Command [ Arg ... ] [ & ]

單獨使用nohup

nohup執行命令可以使命令永久的執行下去,和使用者終端沒有關係,中斷開SSH連線都不會影響他的執行,注意了nohup沒有後臺執行的意思

  • 前面不顯示程序號

  • 有一個 "忽略輸入,輸出至nohup.out" 的提示

  • 輸出不會出現在前臺

  • 關掉SSH連線,程式不會關閉

  • Ctrl +C,程式收到SIGINT訊號後,直接關閉

檢視nohup.out檔案,發現程式的輸出結果躺在nohup.out中

指定輸出到檔案中

nohupCommand &   預設輸出到nohup.out檔案

nohup Command > outputfile 2>&1 &  指定輸出到output檔案
# 一個 > 就行

> 代表重定向到哪裡,如 echo "123" > ./123.txt

作業系統中有三個常用的流:

  • 0:標準輸入流 stdin
  • 1:標準輸出流 stdout
  • 2 :標準錯誤流 stderr

2>&1的意思

把標準錯誤(2)重定向到標準輸出中(1),而標準輸出又匯入檔案output裡面,所以結果是標準錯誤和標準輸出都匯入檔案output裡面了。 至於為什麼需要將標準錯誤重定向到標準輸出的原因,那就歸結為標準錯誤沒有緩衝區,而stdout有

單獨使用&

&是指在後臺執行,當中斷SSH時,命令自動也跟著退出

  • 前面會顯示程序號

  • 鍵入Ctrl + C,發出SIGINT訊號,程式會繼續執行

  • 關掉SSH連線,程式收到SIGINT訊號後,直接關閉

使用nohup和&聯合執行

 nohup COMMAND &

使得命令永久的在後臺執行

特點:

  • 終端顯示中會出現程序號

  • 出現 "忽略輸入,輸出至nohup.out" 的提示

  • 鍵入Ctrl + C,傳送SIGINT訊號,不會關閉

  • 關閉SSH連線,傳送SIGHUP訊號,不會關閉程序

總結

使用&後臺執行程式:

  • 結果會輸出到終端
  • 使用Ctrl + C傳送SIGINT訊號,程式免疫
  • 關閉SSH,傳送SIGHUP訊號,程式關閉

使用nohup執行程式:

  • 結果預設會輸出到nohup.out
  • 使用Ctrl + C傳送SIGINT訊號,程式關閉
  • 關閉SSH,傳送SIGHUP訊號,程式免疫

使用nohup和&配合來啟動程式:

  • 同時免疫SIGINT和SIGHUP訊號