APUE讀書筆記 第9章 程序關係

2021-06-17 17:05:28 字數 1592 閱讀 5400

第9章 程序關係

9.1 引言

*每個程序都有乙個父程序(初始的核心程序並無父程序,也可以說其父程序就是它自己)

*當子程序終止時,父程序得到通知並能取得子程序的退出狀態

9.2 終端登入

*終端可以是基於字元的終端、**簡單的基於字元終端的圖形終端,或者是執行視窗系統的圖形終端

*系統管理員建立通常名為/etc/ttys的檔案,其中,每個終端裝置都有一行,每一行說明裝置名和傳遞給getty程式的引數。當系統自舉時,核心建立程序id為1的程序,也就是init程序。init程序使系統進入多使用者狀態。init程序讀檔案/etc/ttys,對每乙個允許登陸的終端裝置,init呼叫一次fork,它所生成的子程序則執行(exec)getty程式

9.3 網路登入

*通過序列終端登入至系統和經由網路登入至系統兩者之間的主要(物理上)區別是:通過網路登入時,終端盒計算機之間的鏈結不是點對點連線。在這種情況下,login只是一種可用的服務,這與其他網路服務(例如ftp或smtp)的性質相同

9.4 程序組

*每個程序除了有乙個程序id之外,還屬於乙個程序組

9.5 會話

*會話(session)是乙個或多個程序組的集合。通常是由shell的管道線將幾個程序程式設計一組的

9.6 控制終端

*有時不管標準輸入、標準輸出是否被重定向,程式都要與控制終端互動。保證程式能讀寫控制終端的方法是開啟檔案/dev/tty,在核心中,此特殊檔案時控制終端的同義語。自然,如果程式沒有控制終端,則開啟此裝置將失敗

9.7 tcgetpgrp,rcsetpgrp,tcgetsid函式

*函式tcgetpgrp返回前台程序組的程序組id

*如果程序有乙個控制終端,則該程序可以呼叫tcsetpgrp將前台程序組id設定為pgrpid

*給出控制tty的檔案描述符,呼叫tcgetsid的應用程式就能獲得會話首程序的程序組id

9.8 作業控制

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

(1)支援作業控制的shell

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

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

9.9 shell執行程式

*linux的shell在前台在乙個管道線中執行兩個程序,兩個程序都在乙個新的程序組中,這是乙個前台程序組。shell是兩個程序的父程序

9.10 孤兒程序組

*孤兒程序組(orphaned process group)定義為:該組中每個成員的父程序要麼是該組的乙個成員,要麼不是該組所屬會話的成員

*孤兒程序組另一種描述為:乙個程序組不是孤兒程序組的條件是,該組中有乙個程序,其父程序在屬於同一會話的另乙個組中

9.11 freebsd實現

*session結構:每個會話都分配乙個session結構

*tty結構:每個終端裝置和每個偽終端裝置均在核心中分配這樣一種結構

*pgrp結構:包含一特定程序組的資訊

*proc結構:包含乙個程序的所有資訊

*vnode結構:在開啟控制終端裝置時分配此結構,程序對/dev/tty所有引用都通過vnode結構。實際i節點是v節點的一部分

APUE讀書筆記 14 程序關係 下

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

APUE讀書筆記 第10章 訊號

第10章 訊號 10.1 引言 訊號是軟體中斷。訊號提供了一種處理非同步事件的方法 10.2 訊號概念 每個訊號都有乙個名字。這些名字都以三個字元sig開頭 在標頭檔案中,這些訊號被定義為正整數 訊號編號 不存在編號為0的訊號。kill函式對訊號編號0有特殊的應用。此種訊號編號值被稱為空訊號 10....

APUE 第7章 程序環境 學習筆記

1 exit函式先執行乙個標準的io庫的清理關閉操作 呼叫fclose函式關閉所有的流,使得所有的緩衝資料被沖洗 然後呼叫 exit或是 exit 2 atexit函式,用來等級終止處理程式,經過登記的函式,在程序退出的時候,會被逆序呼叫 void atexit void func void 3 核...