linux守護進程與&的區別


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 &


免責聲明!

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



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