nohup 停止 nohup 使用與高階

2021-10-17 10:45:00 字數 2316 閱讀 6181

nohup命令是linux上執行程式必學的命令之一。

使用該命令執行程式可以忽略結束通話訊號。一般最後配合&,使程式在後台執行,並且在終端退出後不打斷程式執行。

nohup &
nohup執行時返回程式執行的程序號,命令預設輸出到當前目錄下的nohup.out檔案。

正常結束時會給出done

$ nohup python temp.py >temp.log 2>&1 &[1] 31430$ [1]+  done                    nohup python temp.py < /dev/null > temp.log 2>&1
指定輸出到temp.log檔案。

2 - stderr指標準錯誤輸出,1 - stdout指標準輸出,&1表示1輸出通道,2>&1表示將2重定向到1,即將標準錯誤輸出傳遞給標準輸出。

$ cat temp.lognohup: ignoring input------
檢視temp.log檔案,發現多了一行ignoring input

為了避免產生此訊息,給定輸入,但是此程式本身不需要輸入,給空輸入的方法是引用/dev/null

$ nohup python temp.py temp.log 2>&1 &
nohup預設使用快取,不實時輸出結果,為了讓結果及時的輸出,可以將快取強制設為0。

stdbuf命令能夠修改與程式關聯的三個標準i/o流的緩衝操作,i - inputo - outpute - error

python自身也有快取機制,使用-u引數不使用快取。

nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1 &
在執行程式時,nohup會返回程序號,因此可以使用kill命令結束該程序。

$ nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1 &[1] 9243$ kill -9 9243$ [1]+  killed                  nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1
kill -9代表的訊號是sigkill,表示程序被終止,需要立即退出,該訊號不會被系統阻塞。

一般我們不會記住程序號,使用top命令可以檢視目前正在執行的程序,找到對應程序號,但是這種方式較為麻煩。

使用ps命令可以輕鬆的找到程序號。

$ ps -aux | grep "python -u temp.py" biodb    15705  0.0  0.0  32372  9232 pts/5    s    16:32   0:00 python -u temp.pybiodb    15764  0.0  0.0  14428  1040 pts/5    s+   16:33   0:00 grep --color=auto python -u temp.py
a: 顯示所有程式,u: 以使用者為主的格式來顯示,x: 顯示所有程式,不區分終端機。

第乙個程序即為正在執行的程式,第二個程序是grep自己的程序。

隨後使用kill

$ kill -9 15705$ [1]+  killed                  nohup stdbuf -i0 -o0 -e0 python -u temp.py < /dev/null > temp.log 2>&1
我是sssimon yang,關注我,用code解讀世界

nohup命令使用

nohup 用途 不結束通話地執行命令。語法 nohup command arg 無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 home nohup.out 檔案中。如果沒有檔案能建...

nohup 簡潔使用

nohup command arg 引數說明 command 要執行的命令 arg 一些引數,可以指定輸出檔案 讓命令在後台執行,終端退出後命令仍舊執行 例子 nohup python train.py 2 erro.txt 1 out.txt ps aux grep command 引數說明 a ...

nohup 執行mysql命令 nohup命令

在應用unix linux時,我們一般想讓某個程式在後台執行,於是我們將常會用 在程式結尾來讓程式自動執行。比如我們要執行mysql在後台 usr local mysql bin mysqld safe user mysql 可是有很多程式並不想mysqld一樣,這樣我們就需要nohup命令,怎樣使...