1、程序組
程序組是乙個或多程序的集合。通常,它們同一作業相關聯,可以接收來自同一終端的各種訊號。每個程序組有乙個唯一的程序組id。每個程序都可以有乙個組長程序。組長程序的標識是,其程序組id等於其程序id。組長程序可以建立乙個程序組,建立該組中的程序,然後終止。只要在某個程序組中乙個程序存在,則該程序組就存在,這與其組長程序是否終止無關。
『&』 :表示將程序組放在後台執行。
程序:2931 2932 2933
組長:2931 ,程序組中的第乙個程序
如上圖,使用命令 kill -9 2931 殺掉組長程序,程序組還在。
檢視程序指令 ps:2、作業
(1)shell分前後台來控制的不是程序而是作業或者程序組。乙個前台作業可以由多個程序組成,乙個後台也可以由多個程序組成,shell可以執行乙個前台作業和多個後台作業。
(2)作業與程序組的區別:如果作業中的某個程序建立了子程序,那麼子程序屬於當前程序組,但不屬於當前作業。
(3)一但作業執行結束,shell就把自己提到前台(子程序還在,但不屬於作業),如果原來的前台程序還存在(子程序還在),子程序自動變為後台程序組。
(4)後台作業可以向前臺輸出資訊,但後台作業不能從前台讀取資訊。
模擬實現該場景:
#include
#include
int main()
else
if(pid==0)
}else
return
0;}
3、作業控制:shell 分前後台來控制的不是程序而是作業或者程序組。乙個前台作業可以由多個程序組成,乙個後台作業也可以由多個程序組成,shell可以同時執行乙個前台作業和任意多個後台作業。
(1)作業控制常用的指令:
a. 檢視後台作業: jobs
b. 將前台作業轉到後台狀態為stopped : ctrl+z
c. 將後台作業轉為前台: fg [作業編號]
d. 將作業放到後台狀態為running : bg [作業編號]
注:cat 檢視指令比較特殊,將cat 轉為後台其狀態只能是stopped,因為cat 是在前台讀取資訊,而後台作業只能向前臺輸出資訊,不能從前台讀取資訊,所以cat 轉後台狀態只能是stopped。因為是stopped狀態所以只能使用 kill -9 將其殺死。
4、會話
會話是乙個或多個程序的集合。乙個會話可以有乙個控制終端。這通常是登陸到其上的終端裝置(在終端登陸情況下)或偽終端裝置(在網路登陸情況下)。建立與控制終端連線的會話首程序被稱為控制程序。乙個會話中的幾個程序組可被分為乙個前台程序組以及乙個或多個後台程序組。所以乙個會話中,應包括控制程序(會話首程序),乙個前台程序組和任意後台程序組。
注:有 -bash 表示從網路重登入的; sid是會話id。
程序間關係
程序同步 定義 程序之間這種相互合作 協同工作的關係稱為程序的同步。制約關係 直接制約 程序互斥 臨界資源 也稱獨佔資源,是指在一段時間內只允許乙個程序訪問的資源。例如印表機,磁帶機,也可以是程序共享的資料 變數等。定義 當多個程序因為爭奪臨界資源而互斥執行稱為程序的互斥。制約關係 間接制約。臨界資...
程序間的關係
程序間有什麼關係呢?我們都知道使用fork函式建立程序是一次呼叫兩次返回。父程序返回子程序的程序id 非0 子程序返回0值。很顯然,使用fork建立出來的兩個程序是父子關係。那如果兩個程序都是同乙個父程序建立出來的,它們是什麼關係呢?兄弟 關係。那麼,兩個或者多個程序之間,都有什麼關係呢?在介紹程序...
Linux程序間關係
程序組 每乙個程序除了自己的程序id,還有自己的程序組id。程序組由乙個或多個程序組成。通常它們與作業相關聯,可以接受同一終端的各種訊號。在程序組中程序id與程序組id相同的為程序組長 組長程序可以建立乙個程序組,建立該組中的程序,然後終止。只要在某個程序組中乙個程序存在,則該程序組就存在,這與其組...