linux普通程序,後台程序,守護程序

2021-08-22 10:29:47 字數 1227 閱讀 8036

預設情況下,程序是在前台執行的,這時就把shell給佔據了,我們無法進行其它操作。對於那些沒有互動的程序,很多時候,我們希望將其在後台啟動,可以在啟動引數的時候加乙個'&'實現這個目的:

[1] 21304

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程序自己變成了程序組長,其檔案描述符號和控制終端沒有關聯,是控制台無關的。

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

fg、bg、jobs、&、ctrl+z

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

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

檢視當前有多少在後台執行的命令

將後台中的命令調至前台繼續執行  

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

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

1. jobs列舉出後台作業資訊。([作業號]   執行狀態   作業名稱)

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

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

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

前台程序 後台程序 守護程序

後台程序又叫守護程序,你知道嗎?作業系統中,前台程序和後台程序有什麼區別?特徵是什麼?後台程式基本上不和使用者互動,優先級別稍微低一點 前台的程式和使用者互動,需要較高的響應速度,優先級別稍微高一點 直接從後台手工啟動乙個程序用得比較少一些,除非是該程序甚為耗時,且使用者也不急著需要結果的時候。假設...

linux 輕量級程序與普通程序的區別

核心執行緒只執行在核心態,不受使用者態上下文的拖累。處理器競爭 可以在全系統範圍內競爭處理器資源 使用資源 唯一使用的資源是核心棧和上下文切換時保持暫存器的空間 排程 排程的開銷可能和程序自身差不多昂貴 同步效率 資源的同步和資料共享比整個程序的資料同步和共享要低一些。輕量級程序 輕量級程序 lwp...

Linux核心執行緒和普通程序區別

numa default policy pid kernel thread kthreadd,null,clone fs clone files rcu read lock kthreadd task find task by pid ns pid,init pid ns rcu read unlo...