国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩


Linux下的信號機(jī)制

分享到:
           

    本文關(guān)鍵字: linux 管道通信,linux 進(jìn)程通信方式,信號

    信號是在軟件層次上對中斷機(jī)制的一種模擬。在原理上,一個進(jìn)程收到一個信號與處理器收到一個中斷請求可以說是一樣的。信號是異步的,一個進(jìn)程不必通過任何操作來等待信號的到達(dá),事實(shí)上,進(jìn)程也不知道信號到底什么時候到達(dá)。信號可以直接進(jìn)行用戶空間進(jìn)程和內(nèi)核進(jìn)程之間的交互,內(nèi)核進(jìn)程也可以利用它來通知用戶空間進(jìn)程發(fā)生了哪些系統(tǒng)事件。它可以在任何時候發(fā)給某一進(jìn)程,而無須知道該進(jìn)程的狀態(tài)。如果該進(jìn)程當(dāng)前并未處于執(zhí)行態(tài),則該信號就由內(nèi)核保存起來,直到該進(jìn)程恢復(fù)執(zhí)行再傳遞給它為止;如果一個信號被進(jìn)程設(shè)置為阻塞,則該信號的傳遞被延遲,直到其阻塞被取消時才被傳遞給進(jìn)程。

    信號是進(jìn)程間通信機(jī)制中唯一的異步通信機(jī)制,可以看做是異步通知,通知接收信號的進(jìn)程有哪些事情發(fā)生了。信號機(jī)制經(jīng)過Posix實(shí)時擴(kuò)展后,功能更加強(qiáng)大,除了基本通知功能外,還可以傳遞附加信息。

    信號事件的發(fā)生有兩個來源:硬件來源(如我們按下了鍵盤上的按鈕或者出現(xiàn)其他硬件故障);軟件來源,常用發(fā)送信號的系統(tǒng)函數(shù)有kill()raise()、alarm()、setitimer()和sigqueue()等,軟件來源還包括一些非法運(yùn)算等操作。

    進(jìn)程可以通過3種方式來響應(yīng)一個信號。

    1.忽略信號

    忽略信號即對信號不做任何處理,其中,有兩個信號不能忽略:SIGKILL和SIGSTOP。

    2.捕捉信號

    定義信號處理函數(shù),當(dāng)信號發(fā)生時,執(zhí)行相應(yīng)的處理函數(shù)。

    3.執(zhí)行默認(rèn)操作

    Linux對每種信號都規(guī)定了默認(rèn)操作,如表1所示。

表1 常見信號的含義及其默認(rèn)操作

信 號 名 含 義 默 認(rèn) 操 作
SIGHUP 該信號在用戶終端連接(正常或非正常)結(jié)束時發(fā)出,通常是在終端的控制進(jìn)程結(jié)束時,通知同一會話內(nèi)的各個進(jìn)程與控制終端不再關(guān)聯(lián) 終止
SIGINT 該信號在用戶輸入INTR字符(通常是Ctrl+C)時發(fā)出,終端驅(qū)動程序發(fā)送此信號并送到前臺進(jìn)程中的每一個進(jìn)程 終止
SIGQUIT 該信號和SIGINT類似,但由QUIT字符(通常是Ctrl+\)來控制 終止
SIGILL 該信號在一個進(jìn)程企圖執(zhí)行一條非法指令時(可執(zhí)行文件本身出現(xiàn)錯誤,或者試圖執(zhí)行數(shù)據(jù)段、堆棧溢出時)發(fā)出 終止
SIGFPE 該信號在發(fā)生致命的算術(shù)運(yùn)算錯誤時發(fā)出。這里不僅包括浮點(diǎn)運(yùn)算錯誤,還包括溢出及除數(shù)為0等其他所有的算術(shù)錯誤 終止
SIGKILL 該信號用來立即結(jié)束程序的運(yùn)行,并且不能被阻塞、處理和忽略 終止
SIGALRM 該信號當(dāng)一個定時器到時的時候發(fā)出 終止
SIGSTOP 該信號用于暫停一個進(jìn)程,且不能被阻塞、處理或忽略 暫停進(jìn)程
SIGTSTP 該信號用于交互停止進(jìn)程,用戶在輸入SUSP字符時(通常是Ctrl+Z)發(fā)出這個信號 停止進(jìn)程
SIGCHLD 子進(jìn)程改變狀態(tài)時,父進(jìn)程會收到這個信號 忽略

    一個完整的信號生命周期可以分為3個重要階段,這3個階段由4個重要事件來刻畫的:信號產(chǎn)生、信號在進(jìn)程中注冊、信號在進(jìn)程中注銷、執(zhí)行信號處理函數(shù)。這里信號的產(chǎn)生、注冊、注銷等是指信號的內(nèi)部實(shí)現(xiàn)機(jī)制,而不是信號的函數(shù)實(shí)現(xiàn)。因此,信號注冊與否與本節(jié)后面講到的發(fā)送信號函數(shù)(如kill()等)及信號安裝函數(shù)(如signal()等)無關(guān),只與信號值有關(guān)。

    相鄰兩個事件的時間間隔構(gòu)成信號生命周期的一個階段。要注意這里的信號處理有多種方式,一般是由內(nèi)核完成的,當(dāng)然也可以由用戶進(jìn)程來完成,故在此沒有明確指出。

    信號的處理包括信號的發(fā)送、捕獲及信號的處理,它們有各自相對應(yīng)的常見函數(shù)。

    ● 發(fā)送信號的函數(shù):kill()、raise()。

    ● 捕捉信號的函數(shù):alarm()、pause()。

    ● 處理信號的函數(shù):signal()、sigaction()

    本文選自華清遠(yuǎn)見嵌入式培訓(xùn)教材《從實(shí)踐中學(xué)嵌入式Linux應(yīng)用程序開發(fā)》

   熱點(diǎn)鏈接:

   1、有名管道(FIFO)
   2、標(biāo)準(zhǔn)流管道
   3、無名管道系統(tǒng)調(diào)用
   4、Linux下進(jìn)程間通信方式-管道
   5、Linux下進(jìn)程間通信

更多新聞>>