天天看點

[轉載] nohup和&背景運作,程序檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程序檢視及終止

https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7

閱讀目錄

  • nohup和&背景運作,程序檢視及終止
    • 1.nohup
    • 2.&
    • 3.nohup和&的差別   
    • &:是指在背景運作,當使用者退出(挂起)的時候,指令自動跟着結束
    • nohup:不挂斷的運作,注意并沒有背景運作的功能,就是指用nohup運作指令可以使指令永久的執行下去,和使用者終端沒有關系,例如我們斷開SSH連接配接都不會影響他的運作,注意了nohup沒有背景運作的意思;&才是背景運作是以将nohup和&結合使用,就可以實作使指令永久地在背景執行的功能
    • 4.舉例
    • 1 sh test.sh &
    • 2 nohup sh test.sh
    • 3 nohup sh test.sh &
    • 輸出重定向

正文

nohup和&背景運作,程序檢視及終止

1.nohup

用途:不挂斷地運作指令。我們在使用Xshell等工具執行Linux腳本時,有時候會由于網絡問題,導緻失去連接配接,終端斷開,程式運作一半就意外結束了。這種時候,就可以用nohup指令來運作指令,使程式可以忽略挂起信号繼續運作。

文法:nohup Command [ Arg … ] [ & ]

  無論是否将 nohup 指令的輸出重定向到終端,輸出都将附加到目前目錄的 nohup.out 檔案中。

  如果目前目錄的 nohup.out 檔案不可寫,輸出重定向到 $HOME/nohup.out 檔案中。

  如果沒有檔案能建立或打開以用于追加,那麼 Command 參數指定的指令不可調用。

退出狀态:該指令傳回下列出口值:   

  126 可以查找但不能調用 Command 參數指定的指令。   

  127 nohup 指令發生錯誤或不能查找由 Command 參數指定的指令。   

  否則,nohup 指令的退出狀态是 Command 參數指定指令的退出狀态。

2.&

用途:在背景運作

一般兩個一起用

nohup command &

3.nohup和&的差別   

&:是指在背景運作,當使用者退出(挂起)的時候,指令自動跟着結束

nohup:不挂斷的運作,注意并沒有背景運作的功能,就是指用nohup運作指令可以使指令永久的執行下去,和使用者終端沒有關系,例如我們斷開SSH連接配接都不會影響他的運作,注意了nohup沒有背景運作的意思;&才是背景運作

是以将nohup和&結合使用,就可以實作使指令永久地在背景執行的功能

4.舉例

1 sh test.sh &

将sh test.sh任務放到背景 ,關閉xshell,對應的任務也跟着停止      

2 nohup sh test.sh

将sh test.sh任務放到背景,關閉标準輸入,終端不再能夠接收任何輸入(标準輸入),重定向标準輸出和标準錯誤到目前目錄下的nohup.out檔案,
即使關閉xshell退出目前session依然繼續運作      

3 nohup sh test.sh &

将sh test.sh任務放到背景,但是依然可以使用标準輸入,終端能夠接收任何輸入,重定向标準輸出和标準錯誤到目前目錄下的nohup.out檔案,
即使關閉xshell退出目前session依然繼續運作      

輸出重定向

  

作業在背景運作的時候,可以把輸出重定向到某個檔案中,相當于一個日志檔案,記錄運作過程中的輸出。使用方法:nohup command > out.file 2>&1 &
command>out.file是将command的輸出重定向到out.file檔案,即輸出内容不列印到螢幕上,而是輸出到out.file檔案中。
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是将标準錯誤(2)重定向到标準輸出(&1),标準輸出(&1)再被重定向輸入到out.file檔案中。      

舉個例子,我們需要保持 test.py 程式的持續運作(用于長時間訓練神經網絡),并且将控制台輸出重定向到日志檔案中,那麼如下指令可以輕松辦到:

nohup python test.py > log.txt &      

在使用 nohup 背景運作指令之後,需要使用 exit 正常退出目前賬戶,這樣才能更好地保證指令一直在背景運作。

上述程序保持持續運作一段時間後,若想停止運作,即殺掉該程序,有如下操作:

kill -9  程序id      

eg:

1

nohup /usr/local/node/bin/node /www/im/chat.js >> /usr/local/node/output.log 2>&1 &

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

程序号7585

檢視運作的背景程序

(1)jobs -l

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

jobs指令隻看目前終端生效的,關閉終端後,在另一個終端jobs已經無法看到背景跑得程式了,此時利用ps(程序檢視指令)

(2)ps -ef 

1

ps -aux|grep chat.js

a:顯示所有程式 
 u:以使用者為主的格式來顯示 
 x:顯示所有程式,不以終端機來區分      
[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

注:

  用ps -def | grep查找程序很友善,最後一行總是會grep自己

  用grep -v參數可以将grep指令排除掉

1

ps -aux|grep chat.js| grep -v grep

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

  再用awk提取一下程序ID 

1

ps -aux|grep chat.js| grep -v grep | awk 

'{print $2}'

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

3.如果某個程序起不來,可能是某個端口被占用

檢視使用某端口的程序

1

lsof -i:8090

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止
1

netstat -ap|grep 8090

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

檢視到程序id之後,使用netstat指令檢視其占用的端口

1

netstat -nap|grep 7779

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

使用kill殺掉進城後再啟動

4.終止背景運作的程序

1

kill -9  程序号

[轉載] nohup和&背景運作,程式檢視及終止https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html#_label0_7閱讀目錄nohup和&背景運作,程式檢視及終止

作者:Mr_Yun

歡迎任何形式的轉載,但請務必注明出處。

限于本人水準,如果文章和代碼有表述不當之處,還請不吝賜教。

Great works are not done by strength, but by persistence!