信號(hào)
一個(gè)信號(hào)就是一小條消息蔚出,它通知進(jìn)程系統(tǒng)中發(fā)生了一個(gè)某種類型的事件
Linux支持的30種不同的類型信號(hào)如下:
信號(hào).png
傳送一個(gè)信號(hào)到目的地的進(jìn)程是由兩個(gè)不同的步驟組成的:
-
發(fā)送信號(hào): 內(nèi)核通過(guò)更新目的進(jìn)程上下文中的某個(gè)狀態(tài)汹粤,發(fā)送一個(gè)信號(hào)給目的進(jìn)程,可以有兩種原因:
- 內(nèi)核檢測(cè)到了一個(gè)系統(tǒng)事件
- 一個(gè)進(jìn)程調(diào)用了
kill函數(shù)
Unix系統(tǒng)提供了大量向進(jìn)程發(fā)送信號(hào)的機(jī)制近忙。所有這些機(jī)制都是基于
進(jìn)程組
這個(gè)概念的 接收信號(hào): 當(dāng)目的進(jìn)程被內(nèi)核強(qiáng)迫以某種方式對(duì)信號(hào)的發(fā)送作出響應(yīng)時(shí)竭业,它就接收了信號(hào)。進(jìn)程可以忽略這個(gè)信號(hào)及舍,終止或通過(guò)執(zhí)行一個(gè)稱為
信號(hào)處理程序
的用戶層函數(shù)來(lái)捕獲這個(gè)信號(hào)
Linux提供阻塞信號(hào)的隱式和顯式兩種機(jī)制:
- 隱式阻塞機(jī)制: 內(nèi)核默認(rèn)阻塞任何當(dāng)前處理程序正在處理信號(hào)類型的待處理的信號(hào)
-
顯式阻塞機(jī)制: 應(yīng)用程序可以使用
sigprocmask
函數(shù)和它的輔助函數(shù)來(lái)明確阻塞和解除阻塞選定的信號(hào)
非本地跳轉(zhuǎn)
C語(yǔ)言提供了一種用戶級(jí)異澄戳荆控制流形式,它將控制直接從一個(gè)函數(shù)轉(zhuǎn)移到另一個(gè)當(dāng)前正在執(zhí)行的函數(shù)锯玛,而不需要經(jīng)過(guò)正常的調(diào)用-返回
序列咐柜,稱作非本地跳轉(zhuǎn)
Linux進(jìn)程工具
- STRACE: 打印一個(gè)正在運(yùn)行的程序和它的子進(jìn)程調(diào)用的每個(gè)系統(tǒng)調(diào)用的軌跡
- PS: 列出當(dāng)前系統(tǒng)中的進(jìn)程(包括僵死進(jìn)程)
- TOP: 打印出關(guān)于當(dāng)前進(jìn)程資源使用的信息
- PMAP: 顯示進(jìn)程的內(nèi)存映射