信號
一個信號就是一條小消息三幻,通知進(jìn)程系統(tǒng)中發(fā)生了一個某種類型的事件。
通常異常都是由內(nèi)核異常處理程序進(jìn)行處理的呐能,正常情況下念搬,對用戶進(jìn)程是不可見的。信號提供了一種機(jī)制,通知用戶進(jìn)程發(fā)生了這些異常朗徊。
傳送一個信號到目的進(jìn)程的步驟:
- 進(jìn)程組:
每個進(jìn)程都屬于一個進(jìn)程組首妖。通常父進(jìn)程和子進(jìn)程屬于同一個進(jìn)程組。
可以通過函數(shù)改變某個進(jìn)程的進(jìn)程組爷恳。 - 發(fā)送信號
- /bin/kill
可以發(fā)送任意信號悯搔,其中殺死進(jìn)程的信號是 /bin/kill -9 pid
殺死進(jìn)程組: /bin/kill -9 -15231(進(jìn)程組PID) - 鍵盤發(fā)送信號
Ctrl+C會發(fā)送SIGINT到前臺進(jìn)程組中的每個進(jìn)程,默認(rèn)情況下會終止前臺作業(yè)舌仍。
Ctrl+Z會發(fā)送SIGTSTP到前臺進(jìn)程組中的每個進(jìn)程,默認(rèn)會掛起前臺作業(yè)通危。 - kill函數(shù)發(fā)送信號
可以給其他進(jìn)程發(fā)送信號 - alarm函數(shù)發(fā)送信號
給自己發(fā)送SIGALRM信號铸豁。
- 接受信號
當(dāng)內(nèi)核把進(jìn)程p從內(nèi)核模式切換到用戶模式,會檢查進(jìn)程p的未被阻塞的待處理信號的集合菊碟,如果集合為空节芥,那么內(nèi)核將控制傳遞到p的邏輯控制流中的下一條指令。然而逆害,如果是非空的头镊,那么會將集合中的某個信號k強(qiáng)制讓p接收。 - 阻塞和解除阻塞信號
隱式阻塞:內(nèi)核默認(rèn)阻塞當(dāng)前程序正在處理信號類型的待處理的信號魄幕。
顯示阻塞機(jī)制:通過函數(shù)明確地阻塞和解除阻塞選定的信號相艇。