APUE讀書筆記 第10章 訊號

2021-06-17 17:41:42 字數 2699 閱讀 1035

第10章 訊號

10.1 引言

*訊號是軟體中斷。訊號提供了一種處理非同步事件的方法

10.2 訊號概念

*每個訊號都有乙個名字。這些名字都以三個字元sig開頭

*在標頭檔案中,這些訊號被定義為正整數(訊號編號)

*不存在編號為0的訊號。kill函式對訊號編號0有特殊的應用。此種訊號編號值被稱為空訊號

10.3 signal函式

*程式啟動:當執行乙個程式時,所有訊號的狀態都是系統預設或忽略。通常所有訊號都設定為它們的預設動作,除非呼叫exec的程序忽略該訊號

*程序建立:當乙個程序呼叫fork時,其子程序繼承父程序的訊號處理方式。因為子程序在開始時複製了父程序的儲存映像,所以訊號捕捉函式的位址在子程序中是有意義的。

10.4不可靠的訊號

*訊號的不可靠指的是,訊號可能會丟失:乙個程序發生了,但程序卻可能一直不知道這一點。同時,程序對訊號的控制能力差。

10.5 中斷的系統呼叫

*系統呼叫分成兩類:低速系統呼叫和其他系統呼叫。低速系統呼叫是可能會使程序永遠阻塞的一類系統呼叫

10.6 可重入函式

*函式被訊號中斷後不可重入的原因:

(a) 已知它們使用靜態資料結構

(b) 它們呼叫malloc或free

(c) 它們是標準i/o函式。標準i/o庫的很多實現都以不可重入的方式使用全域性資料結構

10.7 sigcld語義

*對於sigcld的早期處理方式如下:

(1)如果程序特地設定該訊號的配置為sig_ign,則呼叫程序的子程序將不產生僵死程序

(2)如果將sigcld的配置設定為捕捉,則核心立即檢查是否有子程序準備好被等待,如果是這樣,則呼叫sigcld處理程式

10.8 可靠訊號術語和含義

*當引發訊號的事件發生時,為程序產生了乙個訊號(或向程序傳送乙個訊號)

*當對訊號採取了某種動作時,我們說向程序遞送了乙個訊號

*在訊號產生(generation)和遞送(delivery)之間的時間間隔內,稱訊號是未決的(pending) 

*程序可以選用訊號遞送阻塞

10.9 kill和raise函式

*kill函式將訊號傳送給程序或程序組

*raise函式則允許程序向自身傳送訊號

10.10 alarm和pause函式

*使用alarm函式可以設定乙個計時器,在將來某個指定的時間該計時器會超時。

*當計時器超時時,產生sigalrm訊號。如果不忽略或不捕捉此訊號,則其預設動作時終止呼叫該alarm函式的程序

*pause函式使呼叫程序掛起直至捕捉到乙個訊號

10.11 訊號集

*訊號集(signal set)資料型別能表示多個訊號

*訊號種類數目可能超過乙個整型量所包含的位數,所以一般而言,不能用整型量中的一位代表一種訊號,也就是不能用乙個整型量表示訊號集

10.12 sigprocmask函式

*乙個訊號遮蔽字規定了當前阻塞而不能遞送給該程序的訊號集

*呼叫sigprocmask可以檢測或更改其訊號遮蔽字,或者在乙個步驟中同時執行這兩個操作

10.13 sigpending函式

*sigpending函式返回訊號集,其中的各個訊號對於呼叫程序是阻塞的而不能遞送,因而也一定是當前未決的

10.14 sigaction函式

*sigaction函式的功能是檢查或修改於指定訊號相關聯的處理動作(或同時執行這兩種操作)

10.15 sigsetjmp和siglongjmp函式

*在訊號處理程式中進行非區域性轉移時應當使用sigsetjmp和siglongjmp函式

10.16 sigsuspend函式

*sigsuspend函式的功能是在乙個原子操作中先恢復訊號遮蔽字,然後使程序休眠

*在捕捉到乙個訊號或發生了乙個會終止該程序的訊號之前,該程序被掛起

10.17 abort函式

*abort函式的功能是使異常程式終止

*abort函式將sigabrt訊號傳送給呼叫程序(程序不應忽略此訊號)

*iso c規定,呼叫abort講向主機環境遞送乙個未成功終止的通知,其方法是呼叫raise(sigabrt)函式

10.18 system函式

*posix.1要求system忽略sigint和sigquit,阻塞sigchld

*注意system的返回值,它是shell的終止狀態,但shell的終止狀態並不總是執行命令字串程序的終止狀態

10.19 sleep函式

*sleep函式使呼叫程序被掛起,直到滿足以下條件之一:

(1)已經過了seconds所指定的牆上時鐘時間

(2)呼叫程序捕捉到乙個訊號並從訊號處理程式返回

10.20 作業控制訊號

*6個訊號與作業控制有關:

sigchld 子程序已停止或終止

sigcont 如果程序已停止,則使其繼續執行

sigstop 停止訊號(不能**捉或忽略)

sigtstp 互動式停止訊號

sigttin 後台程序組成員讀控制終端

sigttou 後台程序組成員寫到控制終端

10.21 其他特徵

*某些系統提供陣列extern char *sys_siglist;陣列下標是訊號編號,給出乙個指向訊號字串名字的指標

*sig2str函式將給定訊號編號翻譯成字串

*str2sig函式將給出的名字翻譯成訊號編號

APUE讀書筆記 第14章 高階I O

14.1 引言 高階i o包括非阻塞i o 記錄鎖 系統v流機制 i o多路轉換 select和poll函式 readv和writev函式以及儲存對映i o mmap 14.2 非阻塞i o 非阻塞i o使我們可以呼叫open read和write這樣的i o操作,並使這些操作不會永遠阻塞 14.3...

APUE筆記之10章 訊號

訊號是軟體中斷。訊號提供非同步事件處理方法。早期的訊號模型 不可靠,訊號可能丟失。posix.1對可靠訊號例程進行了標準化。呼叫kill 2 函式可將任意訊號傳送給另乙個程序或程序組,但有限制 當某個訊號出現時,核心有3種處理方式 忽略 有2種訊號不能被忽略 sigkill 和 sigstop,原因...

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

第9章 程序關係 9.1 引言 每個程序都有乙個父程序 初始的核心程序並無父程序,也可以說其父程序就是它自己 當子程序終止時,父程序得到通知並能取得子程序的退出狀態 9.2 終端登入 終端可以是基於字元的終端 簡單的基於字元終端的圖形終端,或者是執行視窗系統的圖形終端 系統管理員建立通常名為 etc...