nohup &的用法、進程查看以及終止


1.nohup

用途:不掛斷地運行命令。如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那么可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之后繼續運行相應的進程。

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

  • 無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。
  • 如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
  • 如果沒有文件能創建或打開以用於追加,那么 Command 參數指定的命令不可調用。

退出狀態:該命令返回狀態如下   

  • 126 可以查找但不能調用 Command 參數指定的命令。   
  • 127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
  • 除此之外,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。

2.&

用途在后台運行,但當用戶退出(掛起)的時候,命令自動也跟着退出

3.nohup與&一起使用

nohup與&合在一起會讓命令永久的在后台執行

語法nohup COMMAND &

eg: nohup command > myout.file 2>&1 &   

其中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ,在該例中 2>&1是將標准錯誤重定向到標准輸出,標准輸出再被重定向輸入到myout.file文件中。

 4.測試

測試文件 mylog.sh

1 #!/bin/bash
2 
3 index=0
4 while [ 1 ]
5     do 
6         echo mylog $index
7         index=$[ index+1 ]
8         sleep 1s
9     done

  測試四種情況:

執行命令 狀態
./mylog.sh 結果會輸出到終端
使用Ctrl + C發送SIGINT信號或關閉session發送SIGHUP信號,程序關閉                                                         
./mylog.sh & 結果會輸出到終端
使用Ctrl + C發送SIGINT信號,程序免疫                                                        
關閉session發送SIGHUP信號,程序關閉
nohup ./mylog.sh 結果默認會輸出到nohup.out
使用Ctrl + C發送SIGINT信號,程序關閉
關閉session發送SIGHUP信號,程序免疫
nohup ./mylog.sh & 同時免疫SIGINT和SIGHUP信號

 

測試過程

1.使用./mylog.sh

2.使用./mylog.sh &

 使用ctrl+c發送SIGINT信號,程序免疫

關閉終端窗口,查看程序,程序關閉

3.使用nohup ./mylog.sh

使用ctrl+c,程序關閉,輸出信息被保存到當前目錄nohup.out文件中

 

關閉終端窗口,查看程序,程序免疫

 4.使用nohup ./mylog.sh &

使用ctrl+c,程序免疫

 

關閉終端窗口,程序免疫

只有通過kill殺掉進程

 

總結

&是把你執行的命令放在后台執行,使用 ctrl+c也終止不了這個命令的執行,除非是 kill進程或者關閉窗口,才會終止這個命令
使用nohup會將命令的輸出重定向到nohup.out文件中, 使用ctr+c可以終止該命令的執行,關閉窗口不能
一般使用nohup   you_command $   ,這樣命令的輸出會被保存到nohup.out中,除了你執行命令的機器出問題,其他相關的出問題都不會影響你的執行

常用任務管理命令

# jobs      //查看任務,返回任務編號n和進程號

# bg  %n   //將編號為n的任務轉后台運行

# fg  %n   //將編號為n的任務轉前台運行

# ctrl+z    //掛起當前任務

# ctrl+c    //結束當前任務

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM