Linux內核中的進程組及會話
將闡述Linux內核中的如下幾個概念
1) 進程組
2) 會話
3) 控制終端
前面的概念來源于前人,我只是站在前人的肩膀上結合內核中的實現加深概念理解。
1.概念:
a)進程組
Shell 上的一條命令行形成一個進程組
每個進程屬于一個進程組
每個進程組有一個領頭進程
進程組的生命周期到組中最后一個進程終止, 或加入其他進程組為止
getpgrp: 獲得進程組 id, 即領頭進程的 pid
setpgid: 加入進程組和建立新的進程組
前臺進程組和后臺進程組
===============================================================================
#include
int setpgid (pid_t pid, pid_t pgid);
pid_t getpgid (pid_t pid);
int setpgrp (void);
pid_t getpgrp (void);
-------------------------------------------------------------------------------
進程只能將自身和其子進程設置為進程組 id.
某個子進程調用 exec 函數之后, 就不能再將該子進程的 id 作為進程組 id.
===============================================================================
b)會話
一次登錄形成一個會話
一個會話可包含多個進程組, 但只能有一個前臺進程組.
setsid 可建立一個新的會話
===============================================================================
#include
pid_t setsid(void);
-------------------------------------------------------------------------------
如果調用進程不是進程組的領頭進程, 該函數才能建立新的會話.
調用 setsid 之后, 進程成為新會話的領頭進程.
進程成為新進程組的領頭進程.
進程失去控制終端
===============================================================================
c)控制終端
會話的領頭進程打開一個終端之后, 該終端就成為該會話的控制終端 (SVR4/Linux)
與控制終端建立連接的會話領頭進程稱為控制進程 (session leader)
一個會話只能有一個控制終端
產生在控制終端上的輸入和信號將發送給會話的前臺進程組中的所有進程
終端上的連接斷開時 (比如網絡斷開或 Modem 斷開), 掛起信號將發送到控制進程(session leader)
posted on 2010-08-06 14:09
何克勤 閱讀(307)
評論(0) 編輯 收藏 所屬分類:
GNU Linux/Unix