linux程序組會話控制終端
乙個程序可以通過fork()呼叫建立子程序,這些程序就可以構成乙個程序組。
www.2cto.com
程序組
---------------------------------------------
程序組是乙個或多個程序的集合。每個程序組有乙個稱為組長的程序,組長程序就是其程序號(pid)等於程序組號(gid)的程序(即程序組號等於組長的程序號)。程序組的概念有很多用途,最常見的是我們在終端上向前臺執行程式發出終止訊號(ctrl-c),同時終止整個程序組的所有程序。
(1). shell上的一條命令列形成乙個程序組
(2). 每個程序屬於乙個程序組
(3). 每個程序組有乙個領頭程序(組長)
(4). 程序組的生命週期到組中最後乙個程序終止, 或加入其他程序組為止
(5). getpgrp: 獲得程序組id, 即領頭程序的pid
(6). 前台程序組和後台程序組
(7). 程序a(假設該程序為組長)和其子程序b屬於同一程序組,它們的程序組號(task_struct.gid)都為程序a的程序號(a.pid)
會話 www.2cto.com
---------------------------------------------
會話期(session,或者稱為會話)則是乙個或多個程序組的集合。通常情況下,使用者登入後所執行的所有程式都屬於乙個會話期,而其登入shell則是會話期首程序(session leader),並且它所使用的中斷就是會話期的控制終端(controlling terminal),因此會話期的首程序通常也被稱為控制程序(controlling process)。當我們退出登入(logout)時,所有屬於這個會話期的程序都將被終止。
(1). 一次登入形成乙個會話
(2). 乙個會話可包含多個程序組, 但只能有乙個前台程序組.
(3). setsid()可建立乙個新的會話;如果呼叫該函式的程序不是程序組的領頭程序, 該函式才能建立新的會話.
呼叫setsid()之後, 呼叫程序將成為新會話的領頭程序.
控制終端
---------------------------------------------
(1) 會話的領頭程序開啟乙個終端之後, 該終端就成為該會話的控制終端 (svr4/linux)
(2) 與控制終端建立連線的會話領頭程序稱為控制程序 (session leader)
(3) 乙個會話只能有乙個控制終端
(4) 產生在控制終端上的輸入和訊號將傳送給會話的前台程序組中的所有程序
(5) 終端上的連線斷開時(比如網路斷開或modem斷開), 掛起訊號將傳送到控制程序(session leader)
程序組 會話 控制終端
程序組 程序組是乙個或多個程序的集合,每個程序都屬於乙個程序組,程序組有唯一組id。同一程序組中的各程序接收來自同一終端的各種訊號。pid t getpgrp void 返 用程序的程序組id 每個程序組有乙個組長程序,程序組id即為組長程序id。程序組組長可以建立乙個程序組 建立組中的程序,然後終...
程序 程序組 會話 控制終端之間的關係
linux是乙個多使用者多工的分時作業系統,必須要支援多個使用者同時登陸同乙個作業系統。當乙個使用者登陸一次終端時就會產生乙個會話,每個會話有乙個會話首程序,即建立會話的程序,建立與終端連線的就是這個會話首程序,也被稱為控制程序。乙個會話可以包括多個程序組,這些程序組可被分為乙個前台程序組和乙個或多...
Linux 程序組 會話 守護程序
程序組 乙個或多個程序的集合 程序組id 正整數 兩個函式 getpgid 0 getpgrp eg 顯示子程序與父程序的程序組id 1 include 2 include 3 include 45 int main else if pid 0 1718 sleep 3 19 printf the ...