1.默認情況下,進程是在前台運行的,這時就把shell占據了(有很多日志打印輸出),我們無法進行其他操作。所以對於沒有交互的進程,很多時候我們希望將其在后台啟動,可以在啟動參數的時候加一個&實現這個目的。
2.切換到后台的進程稱為job,切換到后台時會輸出相關job信息:
miaoying@miaoying-OptiPlex-7040:~$ python3 ~/.local/lib/python3.5/site-packages/pgadmin4/pgAdmin4.py & [1] 12225
例如這個: [1] 12225
[1] 表示job的ID,12225表示進程ID是12225。切換到后台的進程,仍然可以用ps命令查看,或通過jobs命令只查看所有job(后台進程)。
后台進程會隨着shell的退出而結束。
3.守護進程已經完全脫離終端控制了,而后台進程並未完全脫離終端,在終端未關閉前還是會往終端輸出結果。
4.守護進程在關閉終端控制台時不會受影響,而后台程序會隨用戶退出而停止,需要在以nohup command &格式運行才能避免影響。
5.守護進程的會話組和當前目錄,文件描述符都是獨立的,后台運行只是終端進行了一次fork,讓程序在后台執行,這些都沒改變。
查看守護進程:
ps -axj
-a表示顯示由其他用戶所擁有的進程的狀態
-x顯示沒有控制終端的進程狀態
-j顯示與作業有關的信息:會話ID、進程組ID等
6.使普通進程達到守護進程的部分效果:
nohup ./a.out &
7.nohup
用途:不掛斷地運行命令,即使終端ssh關閉了也一直運行
語法:nohup command [arg ...] [ & ]
as:
nohup ./start.sh &
無論是否將nohup命令的輸出重定向到終端,輸出都將附加到當前目錄的nohup.out文件中。如果當前目錄的nohup.out文件不可寫,輸出重定向到$HOME/nohup.out文件中。如果沒有文件能創建或打開以用於追加,那么command參數指定的命令不可調用。
8.&
用途:在后台運行,當關閉了ssh終端,程序也會關閉
as:
start.sh &