Linux 普通進程 后台進程 守護進程


一、普通進程與后台進程

默認情況下,進程是在前台運行的,這時就把shell給占據了,我們無法進行其它操作。對於那些沒有交互的進程,很多時候,我們希望將其在后台啟動,可以在啟動參數的時候加一個'&'實現這個目的:

zsm@wilburUbun:~/application/zookeeper-3.4.8/bin$ ./zkServer.sh start &
[1] 21304
zsm@wilburUbun:~/application/zookeeper-3.4.8/bin$ ZooKeeper JMX enabled by default
Using config: /home/zsm/application/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[1]+  Done                    ./zkServer.sh start

切換到后台的進程稱為job。切換到后台時會輸出相關job信息,以前面的輸出[1] 21304為例:[1]表示job ID,21304表示進程ID是21304。 切換到后台的進程,仍然可以用ps命令查看,或通過jobs命令只查看所有job(后台進程)。

后台進程會隨着Shell的退出而結束。

二、守護進程

如果一個進程永遠都是以后台方式啟動,並且不能受到Shell退出影響而退出,一個正統的做法是將其創建為守護進程(daemon)。守護進程值得是系統長期運行的后台進程,類似Windows服務。守護進程信息通過ps –a無法查看到,需要用到–x參數,當使

用這條命令的時候,往往還附上-j參數以查看作業控制信息,其中TPGID一欄為-1就是守護進程。

三、守護進程與后台進程

后台進程的文件描述符也是繼承於父進程,例如shell,所以它也可以在當前終端下顯示輸出數據。但是daemon進程自己變成了進程組長,其文件描述符號和控制終端沒有關聯,是控制台無關的。

基本上任何一個程序都可以后台運行,但守護進程是具有特殊要求的程序,比如要脫離自己的父進程,成為自己的會話組長等,這些要在代碼中顯式地寫出來換句話說,守護進程肯定是后台進程,但反之不成立。 

四、進程查看

守護進程:ps -x

普通進程:ps 或 帶參數的其他ps命令

后台進程:jobs 或 前面的上述的那些命令

五、跟系統任務相關的幾個命令

fg、bg、jobs、&、ctrl+z

1. & 最經常被用到

   這個用在一個命令的最后,可以把這個命令放到后台執行

2. ctrl + z

     可以將一個正在前台執行的命令放到后台,並且暫停

3. jobs

     查看當前有多少在后台運行的命令

4. fg

     將后台中的命令調至前台繼續運行  

  如果后台中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)

5. bg 將一個在后台暫停的命令,變成繼續執行

如果后台中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)

  1. jobs列舉出后台作業信息。([作業號]   運行狀態   作業名稱)

  2. ctrl+z 將任務放到后台去,並暫停;

  3. bg  <%int> 將后台任務喚醒,在后台運行;

  4. fg   <%int> 將后任務的程序放到前台;

  


免責聲明!

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



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