第九章 進程關係
進程組
每個進程組都有一個組長進程。組長進程的標識是,其進程ID等於進程組ID
組長進程可以創建一個進程組,創建該組中的進程,然後終止。只要在某個進程組中有一個進程存在,則該進程組就存在,這與其組長進程是否終止無關。從進程組創建開始到其中最後一個進程離開爲止的時間成爲一個進程組的生存期。進程中的最後一個進程可以終止,或者轉移到另外一個進程組。
pid_t getgpid()或者進程所在的進程組ID
進程可以通過int setpgid(pid_t pid, pid_t pgid)來加入一個現有的組或者創建一個新進程組
setpgid 函數將pid進程的進程組ID設置爲pgid ,如果這兩個參數相等,則由pid制定的進程變成進程組的組長,如果pid 等於0 則使用調用者的進程ID,另外,如果pgid是0,則由pid指定的進程將用作進程組ID。
一個進程只能爲它自己或者他的子進程設置進程組,
會話
會話是一個或者多個進程組的集合。
進程通過調用pid_t setsid()建立一個新會話。
如果調用次函數的進程不是一個進程組的組長,則此函數就會創建一個新會話,結果發生3件事
1 進程變成新會話首進程,此時該進程爲新會話中的唯一進程
2 該進程成爲一個新進程的組長進程。新進程組ID是調用進程的進程ID
3 該進程沒有控制終端,如果調用setsid之前該進程有一個控制終端,那麼這種聯繫也會被中斷。
如果該調用進程已經是一個進程組的組長,則此函數返回錯誤。
pid_t getsid(pid_t pid)
如果pid是0的話,getsid返回調用進程的會話首進程的進程組ID
控制終端
會話和進程組有的一些其他特性。
1 一個會話可以有一個控制終端。這通常是登陸到其上的終端設備或者僞終端設備。
2 建立與控制終端連接的會話首進程被稱爲控制進程。
3 一個會話中的幾個進程可以分成一個前臺進程組,以及一個或者幾個後臺進程組
4 如果一個會話有一個控制終端,那麼他就有一個前臺進程組,會話中的其他進程則爲後他進程組。
5 無論何時鍵入終端的中斷鍵,就會將中斷信號發送給前臺進程的所有進程。
6 無論何時鍵入終端的退出鍵,就會將退出信號發送給前臺進程組中的所有進程。