<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 進(jìn)程間通信之:信號

進(jìn)程間通信之:信號

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257126.htm

8.3

8.3.1概述

是UNIX中所使用的進(jìn)程通信的一種最古老的方法。它是在軟件層次上對中斷機制的一種模擬,是一種異步通信方式。信號可以直接進(jìn)行用戶(hù)空間進(jìn)程和內核進(jìn)程之間的交互,內核進(jìn)程也可以利用它來(lái)通知用戶(hù)空間進(jìn)程發(fā)生了哪些系統事件。它可以在任何時(shí)候發(fā)給某一進(jìn)程,而無(wú)需知道該進(jìn)程的狀態(tài)。如果該進(jìn)程當前并未處于執行態(tài),則該信號就由內核保存起來(lái),直到該進(jìn)程恢復執行再傳遞給它為止;如果一個(gè)信號被進(jìn)程設置為阻塞,則該信號的傳遞被延遲,直到其阻塞被取消時(shí)才被傳遞給進(jìn)程。

在第2章kill命令中曾講解到“−l”選項,這個(gè)選項可以列出該系統所支持的所有信號的列表。在筆者的系統中,信號值在32之前的則有不同的名稱(chēng),而信號值在32以后的都是用“SIGRTMIN”或“SIGRTMAX”開(kāi)頭的,這就是兩類(lèi)典型的信號。前者是從UNIX系統中繼承下來(lái)的信號,為不可靠信號(也稱(chēng)為非實(shí)時(shí)信號);后者是為了解決前面“不可靠信號”的問(wèn)題而進(jìn)行了更改和擴充的信號,稱(chēng)為“可靠信號”(也稱(chēng)為實(shí)時(shí)信號)。那么為什么之前的信號不可靠呢?這里首先要介紹一下信號的生命周期。

一個(gè)完整的信號生命周期可以分為3個(gè)重要階段,這3個(gè)階段由4個(gè)重要事件來(lái)刻畫(huà)的:信號產(chǎn)生、信號在進(jìn)程中注冊、信號在進(jìn)程中注銷(xiāo)、執行信號處理函數,如圖8.6所示。相鄰兩個(gè)事件的時(shí)間間隔構成信號生命周期的一個(gè)階段。要注意這里的信號處理有多種方式,一般是由內核完成的,當然也可以由用戶(hù)進(jìn)程來(lái)完成,故在此沒(méi)有明確畫(huà)出。

圖8.6信號生命周期

一個(gè)不可靠信號的處理過(guò)程是這樣的:如果發(fā)現該信號已經(jīng)在進(jìn)程中注冊,那么就忽略該信號。因此,若前一個(gè)信號還未注銷(xiāo)又產(chǎn)生了相同的信號就會(huì )產(chǎn)生信號丟失。而當可靠信號發(fā)送給一個(gè)進(jìn)程時(shí),不管該信號是否已經(jīng)在進(jìn)程中注冊,都會(huì )被再注冊一次,因此信號就不會(huì )丟失。所有可靠信號都支持排隊,而所有不可靠信號都不支持排隊。

注意

這里信號的產(chǎn)生、注冊和注銷(xiāo)等是指信號的內部實(shí)現機制,而不是調用信號的函數實(shí)現。因此,信號注冊與否,與本節后面講到的發(fā)送信號函數(如kill()等)以及信號安裝函數(如signal()等)無(wú)關(guān),只與信號值有關(guān)。

用戶(hù)進(jìn)程對信號的響應可以有3種方式。

n 忽略信號,即對信號不做任何處理,但是有兩個(gè)信號不能忽略,即SIGKILL及SIGSTOP。

n 捕捉信號,定義信號處理函數,當信號發(fā)生時(shí),執行相應的自定義處理函數。

n 執行缺省操作,對每種信號都規定了默認操作。

中的大多數信號是提供給內核的,表8.6列出了中最為常見(jiàn)信號的含義及其默認操作。

表8.6 常見(jiàn)信號的含義及其默認操作

信號名

含義

默認操作

SIGHUP

該信號在用戶(hù)終端連接(正?;蚍钦#┙Y束時(shí)發(fā)出,通常是在終端的控制進(jìn)程結束時(shí),通知同一會(huì )話(huà)內的各個(gè)作業(yè)與控制終端不再關(guān)聯(lián)

終止

SIGINT

該信號在用戶(hù)鍵入INTR字符(通常是Ctrl-C)時(shí)發(fā)出,終端驅動(dòng)程序發(fā)送此信號并送到前臺進(jìn)程中的每一個(gè)進(jìn)程

終止

SIGQUIT

該信號和SIGINT類(lèi)似,但由QUIT字符(通常是Ctrl-)來(lái)控制

終止

SIGILL

該信號在一個(gè)進(jìn)程企圖執行一條非法指令時(shí)(可執行文件本身出現錯誤,或者試圖執行數據段、堆棧溢出時(shí))發(fā)出

終止

SIGFPE

該信號在發(fā)生致命的算術(shù)運算錯誤時(shí)發(fā)出。這里不僅包括浮點(diǎn)運算錯誤,還包括溢出及除數為0等其他所有的算術(shù)錯誤

終止

SIGKILL

該信號用來(lái)立即結束程序的運行,并且不能被阻塞、處理或忽略

終止

SIGALRM

該信號當一個(gè)定時(shí)器到時(shí)的時(shí)候發(fā)出

終止

SIGSTOP

該信號用于暫停一個(gè)進(jìn)程,且不能被阻塞、處理或忽略

暫停進(jìn)程

SIGTSTP

該信號用于交互停止進(jìn)程,用戶(hù)鍵入SUSP字符時(shí)(通常是Ctrl+Z)發(fā)出這個(gè)信號

停止進(jìn)程

SIGCHLD

子進(jìn)程改變狀態(tài)時(shí),父進(jìn)程會(huì )收到這個(gè)信號

忽略

SIGABORT

進(jìn)程異常終止時(shí)發(fā)出

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

模擬信號相關(guān)文章:什么是模擬信號


linux相關(guān)文章:linux教程


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理



上一頁(yè) 1 2 3 4 5 6 7 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>