APUE 程序關係

2022-09-01 16:27:13 字數 1935 閱讀 5941

unix程序關係主要有三種:父程序和子程序、程序組、程序會話。

1、程序組

每個程序除了有乙個程序id之外,還屬於乙個程序組。程序組是乙個或多個程序的集合。通常他們與同一作業相關聯,可接受來自同一終端的各種訊號。

函式getpgrp返**用程序的程序組id。

#includepid_t getpgrp(

void);

每個程序組都有乙個組長程序,組長的標誌是其程序id等於程序組id。組長程序可以建立乙個程序組,然後就終止。只要程序組中有乙個程序存在,那麼程序組就存在,跟組長程序是否存在沒有關係。程序組中的最後乙個程序可以終止,或者轉移到另乙個程序組。

程序可以通過呼叫setpgid加入乙個現有的組或者建立乙個新的程序組。

int setpgid(pid_t pid,pid_t pgid);

2、會話

會話是乙個或多個程序組的集合,下面乙個會話中有三個程序組:

通常是由shell的管道將幾個程序編成一組的。

程序呼叫setsid函式來建立乙個新的會話:

pid_t setsid(void);

如果呼叫程序不是乙個程序組長,那麼這個函式建立乙個新的會話。有三件事發生:

(1)該程序變成新會話的會話首程序。(會話首程序是建立該會話的程序。)該程序是這個新會話裡的唯一程序。

(2)該程序變為乙個新程序組的程序組長。新程序組id就是該呼叫程序的程序id。

(3)該程序沒有控制終端。如果程序在呼叫setsid之前有乙個控制終端,那麼這個關聯被中斷。

ps:如果呼叫者已經是乙個程序組長,那麼這個函式返回乙個錯誤。為了保證不出現這種情況,通常的做法是呼叫fork,然後使父程序終止,而讓子程序繼續。

3、控制終端

會話和程序組有幾個其它的特性::

(1)會話可以有單一的控制終端。這通常是在登入到其上的終端裝置(在終端登入的情況下)或者偽終端裝置(在網路登入的情況下)。

(2)建立與控制終端連線的會話首程序被稱為控制程序。

(3)乙個會話裡的幾個程序組可以被分為乙個前台程序組和乙個或多個

後台程序組。

(4)如果乙個會話有乙個控制終端,那麼它有乙個前台程序組,而在這個會話裡的所有其它程序組都是後台程序組。

(5)每當我們輸入終端的中斷鍵(經常是delete或control+c),就會將中斷訊號傳送給前台程序組的所有程序。

(6)無論何時我們輸入終端的退出鍵(常常是ctrl+\),就會將退出訊號傳送給前台程序組的所有程序。

(7)如終端介面檢測到數據機或者網路連線斷開連線,則將掛起訊號傳送給控制程序(會話首程序)。

通常,我們不必擔心控制終端,登陸時,將自動建立控制終端。

4、作業控制

作業控制是一項由shell支援的特性,允許執行多項作業,乙個在前台執行,其他在後台執行。

作業和程序的區別是它指整個命令列所需的全部程序。程序由核心控制,作業由shell控制。

作業控制允許在乙個終端上啟動多個作業(程序組),它控制哪乙個作業可以訪問該終端以及哪些作業在後台執行。作業控制要求三種形式的支援:

(1) 支援作業控制的shell。

(2) 核心中的終端驅動程式必須支援作業控制。

(3) 必須提供對某些作業控制訊號的支援。

5.孤兒程序組

乙個父程序已終止的程序稱為孤兒程序(orphan process),這種程序由init程序收養。

定義1:乙個程序組不是孤兒程序組的條件是,該組中每個成員的父程序要麼是該組的乙個成員,要麼不是改組所屬會話的成員。

定義2:不是孤兒程序組的條件是,該組中有乙個程序,其父程序屬於同一會話的另乙個組中。

APUE 再讀之程序關係

本章是最為難懂,最為晦澀的一章。主要講解程序組,session,終端,作業之間關係和概念。1.終端登入 終端登入由init自舉fork getty程序,getty 呼叫類似execle usr bin login login p username,char 0,envp 這樣的語句來完成登入過程。正...

APUE讀書筆記 14 程序關係 下

一 會話 會話是乙個或者多個程序組的集合,如下圖中乙個會話有三個程序組 會話中的程序組通常是由shell中的管道 進行連線的,比如上圖的安排可能是有如下命令形成的 p1 p2 p3 p4 p5,程序呼叫setsid函式可以建立乙個新會話。如果呼叫這個函式的程序不是乙個程序組的組長,那麼將會發生以下三...

APUE 程序環境

mian函式 c程式總是從main函式開始執行。main函式的原型是 int main int argc,char argv 其中,argc是命令列引數的數目,argv是指向引數的各個指標所構成的陣列。當核心執行c程式時,在呼叫main之前先呼叫乙個特殊的啟動例程。可執行程式檔案將此啟動例程指定為程...