第九章 程序關系
程序組
每個程序組都有一個組長程序。組長程序的辨別是,其程序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 無論何時鍵入終端的退出鍵,就會将退出信号發送給前台程序組中的所有程序。