我們在利用指令檢視程序資訊的表頭
其中ppid與pid是父程序id與子程序id,而這裡有個pgid是什麼呢?
我們在談論執行緒的時候,說過執行緒有乙個執行緒組,而執行緒組id就是這個執行緒主線程的id。也是這個執行緒所組成程序的程序pid。而程序也是有程序組的,這裡的這個pgid就是程序組id,每個程序組有唯一的乙個程序組id。並且這個id就是程序組組長id,也就是建立程序組的程序。類似於執行緒裡面的主線程與執行緒組的關係。但是不同之處在於,執行緒組裡面某乙個執行緒異常退出(注意是異常退出)整個執行緒組就會終止。而程序組內某乙個程序異常退出不會影響到程序組。並且執行緒組內主線程退出,執行緒組也隨之消失。而程序組的組長退出,程序組仍舊存在。直至程序組內部最後乙個程序退出,程序組才消失。
我們執行以後檢視此時程序,然後,我們殺掉程序組長。這個時候組長退出。由於接下來三個程序時組長建立的,所以組長是後面三個程序的父程序,父程序退出,子程序為孤兒程序,被一號程序收養。所以這三個程序的ppid為1。我們發現在組長退出後,程序組還存在。
注: ps指令的選項:
a:不僅列當前使用者的程序,也列出所有其他使用者的程序
x:不僅列有控制終端的程序,也列出所有無控制終端的進
j :列出與作業控制相關的資訊
我們常常說前台程序後台程序,其實這裡面並不是前台程序後台程序。 這裡更應該說的是前台程序組,後台程序組。而我們又稱之為作業。乙個前台作業可以由多個程序組組成,乙個後台作業也可由由多個程序組組成。但是我們在終端下,只能執行乙個前台作業,和任意個後台作業。這樣看來,作業與程序組有些相似,不過二者還是有區別的。如果作業中某個程序由建立了子程序,那麼這個時候子程序並不屬於這個作業。也就是說作業在乙個可執行檔案從檔案到程序組的這個過程中,已經建立完畢。我們在開啟終端的時候shell就是我們的前台作業,我們可以通過給shell傳送指令,shell解析指令後傳給作業系統核心,這樣達到了對作業系統的控制。
在作業當中的程序,如果建立了子程序,這個子程序是此時程序組內的成員,但是它並不是作業當中的成員。
我們發現,父程序退出以後,子程序仍在執行,但是我們輸入指令kill -9 加子程序pid,這時候成功殺掉了子程序。也就是說現在,我們的shell是起作用的。這是因為我們開啟終端,此時前台作業是shell,然後當我們敲下./job
的時候,此時shell無法執行,因為前台只允許乙個作業。這個時候job成了乙個新的作業。而這個瞬間,job並沒有子程序的建立。也就是說將來建立的子程序並不屬於這個作業。此時的前台作業就是job,當job建立子程序後,由於前台只允許有乙個作業,所以此時的子程序就屬於後台作業。而當job退出以後,shell被提到前台作為前台作業,這個時候子程序仍舊在後台工作,為後台作業,但是後台作業可以向標準輸出緩衝區進行輸入。所以就出現了螢幕不斷列印內容。這時候由於我們的shell已經成前台作業了,所以就可以進行命令解析。我們輸入kill -9就可以殺掉這個後台作業。
我們可以用指令jobs檢視當前有哪些作業,其中fg命令可以將後台作業提到前台執行,bg可以將前台作業放到後台。前台放到後台時,首先用ctrl + z將作業暫停,再進行放置。
我們在最開始的那一欄裡,可以看到有乙個表頭sid,其實這個sid就是會話id。會話是乙個或多個程序組的集合。乙個會話可以有乙個控制終端。一般情況下,這個控制終端是登入到其上的終端裝置。乙個會話應該包括控制程序(話首程序),乙個前台程序組和多個後台程序組。
我們來做個測試,我們先開啟我們的xshell,連線上我們的虛擬機器,現在相當於我們開啟了乙個終端。然後我們執行任意程序。檢視程序的會話id。
我們發現,在我們的進test執行的時候,它的會話id是25467,而我們檢視25467的時候發現,這個會話id恰好是bash的程序id,也就是說,我們這個終端的話首程序就是bash,而bash不僅建立會話,還建立程序組。
我們現在做個測試,我們將我們的bash程序kill掉,也就是說關閉話首程序。看看有什麼後果。
這個測驗就讓我們知道了,乙個會話當中,如果話首程序退出,那麼會話退出。
Linux 程序組,作業,會話的理解
1.程序組 每個程序除了有乙個程序id之外,還屬於乙個程序組。程序組是乙個或多個程序的集合。通常,它們與同一作業相關聯,可以接收來自同一終端的各種訊號。每個程序組有乙個唯一的程序組id。每個程序組都可以有乙個組長程序。組長程序的標識是,其程序組id等於其程序id。組長程序可以建立乙個程序組,建立該組...
程序組 作業及會話
1.程序組 每個程序組有 乙個唯一的程序組id,就跟程序有自己唯一的乙個程序id一樣。每個程序除了有自己的程序id外,還會屬於乙個程序組,乙個或多個程序的集合稱為乙個程序組。它們與同一作業作業相關聯。只要程序組中有乙個程序存在,那麼這個程序組就是存在的 之前說過乙個程序也能稱為乙個程序組 2.作業 ...
程序間關係 程序組 作業 會話
程序組 之前我們在檢視系統程序相關資訊時,會看到每乙個程序的id和其父程序的id等相關資訊,其中就有乙個pgid,代表的是組id。什麼是組id呢?程序除了有自己的乙個程序id之外,每乙個程序還屬於乙個程序組。而這其中的pgid就是組id,指明了該程序是屬於哪乙個程序組。那麼什麼是程序組呢?其實這個程...