程序組:乙個或者多個程序的集合。程序有自己的程序id,同時他還屬於乙個程序組。既然有程序組那麼肯定就有組長程序;組長程序的id等於該程序組id;這個組中只要還有乙個程序還在,程序組就在!與組長在不在沒關係。
作業控制:乙個shell可以執行乙個前台作業和任意個後台作業。前台和後台都可以由多個程序 組成。
什麼是shell?: shell 單詞是「殼」的意思,在linux中shell就是乙個面向使用者的命令介面,可以由使用者錄入的介面,並且在介面反饋資訊。(也就是我們開啟終端敲命令的那個命令列。)
(詳細了解shell,請檢視如下鏈結)
作業和程序組的區別:如果作業中的某個程序建立了子程序,該子程序不屬於作業。作業執行結束後,shell即將自己從後台提到前台(此時剛那個子程序還在),如果這個子程序還沒終止,則變為後台程序組。
來看個例子:
結果:
分析:
我們在做個測試:在寫乙個死迴圈的程式:
執行程式,就會一直迴圈,我們使用 「ctrl+z」命令可將正在前台執行的命令*放到後台並暫停執行*;
jobs命令:檢視linux任務列表中的任務狀態;包括後台執行的程式。
使用:jobs 選項 引數
選項 -l :顯示程序號
-p : 僅任務對應的顯示程序號
-n :顯示任務狀態的變化
-r/s :僅輸出正在執行狀態running / 停止狀態stoped的任務
jobs命令詳細介紹
在linux系統中執行某些操作時候,有時需要將當前任務暫停調至後台,或有時須將後台暫停的任務重啟開啟並調至前台,這一串行的操作將會使用到 jobs、和 fg(把後台的命令調到前台繼續執行)、bg(把後台暫停的任務喚醒,繼續執行) 三個命令以及兩個快捷鍵來完成。
我們繼續測試:(剛剛執行了死迴圈的程式,並用ctrl+z將他放到了後台暫停執行);現在執行我們一開始的那個程式:(在父程序沒有退出前,我們也將他放到後台)
然後jobs檢視後台程序:我們發現有兩個
到這裡,我們看到,子程序不在後台了,卻在一直執行;同時shell(我們輸指令的命令列)也是可以執行的,我們敲的指令都能執行,這是為什麼???
**其實:shell只能執行乙個前台作業;而作業可以由多個程序組成;所以,前台下當然可以執行多個程序咯;就像這裡可以同時執行shell(輸入指令的命令列)
和子程序。**
會話
會話是乙個或者多個程序組的集合;乙個會話可以由乙個控制終端;建立與控制終端連線的會話首程序稱為控制程序。
乙個會話中的幾個程序組被分成乙個前台程序組和乙個或者多個後台程序組。
守護程序
什麼是守護程序?
有什麼用?
ps auj | more //檢視系統中的程序
建立守護程序:
#include
pid_t setsid(void);
返回值:成功返回新建立的會話(session)的id(也就是當前程序id),
失敗返回-1;
注意:在呼叫setsid函式之前,當前程序不能是程序組的leader,否則函式返回-1;
怎麼保證當前程序不是程序組的leader呢?
例子:
結果:(我們看到a.out的tpgid時候 -1,就是守護程序了)
程序間關係與守護程序
程序組 乙個程序除了有乙個程序id之外,他還屬於乙個程序組。程序組是乙個或者多個程序的集合。通常他們與同乙個作業相關聯,可以接受來自同乙個終端的各種訊號。每個程序組有乙個唯一的程序組id。每個程序都有乙個組長程序,其程序組的id等於其自己的程序id。組長程序可以建立乙個程序組,建立各組中程序,然後終...
Linux 程序間關係 守護程序
ps axj head n 1乙個或多個程序的集合 只要在某個程序組中 個程序存在,則該程序組就存在,這與其組 程序是否終 關。個前台作業可以由多個程序組成 乙個後台也可以由多個程序組成 作業與程序組的區別 a.out sid 會話 session 是 個或多個程序組的集合。建 與控制終端連線的會話...
Linux 程序間關係和守護程序
程序組是乙個或多個程序的集合。通常與乙個作業相關聯,可以接收來自同一終端的各種訊號。我們知道,每個程序都有乙個程序id存放在task struct中,程序組也有程序組id,是唯一的。乙個執行緒組擁有主線程,主線程id就是執行緒組id,類似地,程序組也有乙個組長程序,組長程序的id就是程序組id。組長...