linux將程序放到后台執行


測試腳本test.sh:

 

i=1

while :

do

    echo $i

    sleep 1

    ((i++))

done一、當在前台運行某個作業時,終端會被該作業占據,從而需要再開一個終端來進行其他的操作,為了避免這種不方便我們可以將作業放到后台執行,主要有兩種方式

 

1、&命令

 

sh test.sh &

 

該命令將腳本放到后台執行,但是標准輸出還是會顯示到當前終端,影響用戶操作,所以最好是將輸出重定向到其他文件

 

sh test.sh &>/dev/null

 

如果需要查看輸出結果,也可以定向到一個固定的文件中。

 

2、通過ctrl+z;bg等一系列的命令,將已經在前台運行的作業放到后台執行

 

如果一個作業已經在前台執行,可以通過ctrl+z將該作業放到后台並掛起。然后通過jobs命令查看在后台執行的作業並找到對應的作業ID,執行bg %n(n為通過jobs查到的作業ID)喚醒該作業繼續執行。

 

該方式也存在結果會輸出到終端上的情況,同樣可以用重定向的方法解決

 

相關命令:

 

jobs------------查看在后台執行的進程

 

fg %n----------將后台執行進程n調到前台執行,n表示jobnumber(通過jobs查看的進程編號,而非pid)

 

ctrl+z----------將在前台執行的進程,放到后台並掛起

 

bg %n---------將在后台掛起的進程,繼續執行

 

ctrl+c----------前台進程終止

 

kill %n---------殺掉后台運行的進程,n表示jobnumber(通過jobs查看的進程編號,而非pid)

 

 

 

二、當用戶注銷或者網絡中斷時,終端后收到SIGHUP信號,從而關閉其所有子進程,以上兩種方式會隨着終端的關閉而退出,如果我們需要作業在后台執行並不受終端退出的影響,可以用下面兩種方式

 

1、nohup命令

 

nohup sh test.sh &>/dev/null &

 

nohup命令會忽略SIGHUP信號,從而終端退出時不會影響到后台作業

 

2、將作業掛到新的會話下面

 

(sh test.sh &>/dev/null &)或者將sh test.sh &>/dev/null &放到另一個腳本中運行都可以實現

 

將&也放入()后,我們會發現所提交的作業並不在作業列表中,也就是說,是無法通過jobs來查看的,通過ps查看發現新的作業的PPID是1而不是終端的PID,所以終端退出后不會影響我們的作業

 

 

 

三、另外screen命令也可以實現相應的功能,並能解決程序需要人機交互的問題


免責聲明!

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



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