linux的會話 程序 程序組等概念

2022-06-08 08:00:12 字數 1327 閱讀 2301

1.一些縮寫

pid = 程序id (由核心根據延遲重用演算法生成)

ppid = 父程序id(只能由核心修改)

pgid = 程序組id(子程序、父程序都能修改)

sid = 會話id(程序自身可以修改,但有限制,詳見下文)

tpgid= 控制終端程序組id(由控制終端修改,用於指示當前前台程序組)

2.關於程序、程序組、會話之前的關係

總體關係:

程序屬於乙個程序組,程序組屬於乙個會話,會話可能有也可能沒有控制終端

乙個或多個程序的集合,程序組屬於乙個會話。fork()並不改變程序組id。

程序組組長:

pid與pgid相等的程序。組長可以改變子程序的程序組id,使其轉移到另一程序組。

例如乙個shell程序(下文均以bash為例),當使用管道線時,如echo "hello" | cat,bash以第乙個命令的程序id為該管道線內所有程序設定程序組id。此時echo和cat的程序組id都設定成echo的程序id。

前台程序組

該程序組中的程序能夠向終端裝置進行讀、寫操作的程序組。

登陸shell(例如bash)通過呼叫tcsetpgrp()函式設定前台程序組,該函式將終端裝置的fd(檔案描述符)與指定程序組關聯。成為前台程序組的程序其tpgid=pgid,常常可以通過比較他們來判斷前後臺程序組。

後台程序組

乙個會話中,除前台程序組、會話首程序以外的所有程序組。該程序組中的程序能夠向終端裝置寫,但是當試圖讀終端裝置時,將會收到sigttin訊號,並停止。登入shell可以根據設定在終端上發出一條訊息[1]通知使用者有程序欲求讀終端。

前台程序組id只能有乙個,而後台程序組同時可存在多個。後台程序組的pgid≠tpgid。

組長程序:

組長程序標識: 其程序組id==其程序id

組長程序可以建立乙個程序組,建立該程序組中的程序,然後終止

只要程序組中有乙個程序存在,程序組就存在,與組長程序是否終止無關

程序組生存期: 程序組建立到最後乙個程序離開(終止或轉移到另乙個程序組)

建立新會話:setsid()函式

該呼叫程序是組長程序,則出錯返回

先呼叫fork, 父程序終止,子程序呼叫

該呼叫程序不是組長程序,則建立乙個新會話

•該程序變成新會話首程序(session header)

•該程序成為乙個新程序組的組長程序。

•該程序沒有控制終端,如果之前有,則會被中斷

組長程序不能成為新會話首程序,新會話首程序必定會成為組長程序...

會話 前台程序組 後台程序組 孤兒程序等相關概念

終端登入 當系統自舉時,核心建立id為1 的程序,也就是 init 程序,init 程序系統進入多使用者狀態。init程序讀取 etc inittab 對每乙個允許登入的終端裝置,init 呼叫一次 fork 它所生成的子程序執行 exec getty 程式。getty為終端裝置呼叫 open 函式...

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 ...

程序 程序組 會話

1.程序組 每個程序屬於乙個程序組,程序組是乙個或多個程序的集合,每個程序有乙個唯一的程序組id。獲取程序組的兩個函式 include pid t getpgrp void pid t getpgrp pid t pid 程序組可以有乙個組長程序,組長程序的標識是,其程序組id等於其程序id。程序組...