電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>進(jìn)程間通信之使用信號詳解

進(jìn)程間通信之使用信號詳解

2017-10-18 | rar | 0.4 MB | 次下載 | 1積分

資料介紹

8.3 信號
  8.3.1 信號概述
  信號是UNIX中所使用的進(jìn)程通信的一種最古老的方法。它是在軟件層次上對中斷機制的一種模擬,是一種異步通信方式。信號可以直接進(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)程。
  在第2章kill命令中曾講解到“?l”選項,這個選項可以列出該系統(tǒng)所支持的所有信號的列表。在筆者的系統(tǒng)中,信號值在32之前的則有不同的名稱,而信號值在32以后的都是用“SIGRTMIN”或“SIGRTMAX”開頭的,這就是兩類典型的信號。前者是從UNIX系統(tǒng)中繼承下來的信號,為不可靠信號(也稱為非實時信號);后者是為了解決前面“不可靠信號”的問題而進(jìn)行了更改和擴充的信號,稱為“可靠信號”(也稱為實時信號)。那么為什么之前的信號不可靠呢?這里首先要介紹一下信號的生命周期。
  一個完整的信號生命周期可以分為3個重要階段,這3個階段由4個重要事件來刻畫的:信號產(chǎn)生、信號在進(jìn)程中注冊、信號在進(jìn)程中注銷、執(zhí)行信號處理函數(shù),如圖8.6所示。相鄰兩個事件的時間間隔構(gòu)成信號生命周期的一個階段。要注意這里的信號處理有多種方式,一般是由內(nèi)核完成的,當(dāng)然也可以由用戶進(jìn)程來完成,故在此沒有明確畫出。
  
  圖8.6 信號生命周期
  一個不可靠信號的處理過程是這樣的:如果發(fā)現(xiàn)該信號已經(jīng)在進(jìn)程中注冊,那么就忽略該信號。因此,若前一個信號還未注銷又產(chǎn)生了相同的信號就會產(chǎn)生信號丟失。而當(dāng)可靠信號發(fā)送給一個進(jìn)程時,不管該信號是否已經(jīng)在進(jìn)程中注冊,都會被再注冊一次,因此信號就不會丟失。所有可靠信號都支持排隊,而所有不可靠信號都不支持排隊。
  注意這里信號的產(chǎn)生、注冊和注銷等是指信號的內(nèi)部實現(xiàn)機制,而不是調(diào)用信號的函數(shù)實現(xiàn)。因此,信號注冊與否,與本節(jié)后面講到的發(fā)送信號函數(shù)(如kill()等)以及信號安裝函數(shù)(如signal()等)無關(guān),只與信號值有關(guān)。
  用戶進(jìn)程對信號的響應(yīng)可以有3種方式。
  n 忽略信號,即對信號不做任何處理,但是有兩個信號不能忽略,即SIGKILL及SIGSTOP。
  n 捕捉信號,定義信號處理函數(shù),當(dāng)信號發(fā)生時,執(zhí)行相應(yīng)的自定義處理函數(shù)。
  n 執(zhí)行缺省操作,Linux對每種信號都規(guī)定了默認(rèn)操作。
  Linux中的大多數(shù)信號是提供給內(nèi)核的,表8.6列出了Linux中最為常見信號的含義及其默認(rèn)操作。
  表8.6 常見信號的含義及其默認(rèn)操作
  信 號 名含 義默 認(rèn) 操 作
  SIGHUP該信號在用戶終端連接(正?;蚍钦#┙Y(jié)束時發(fā)出,通常是在終端的控制進(jìn)程結(jié)束時,通知同一會話內(nèi)的各個作業(yè)與控制終端不再關(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ù)運算錯誤時發(fā)出。這里不僅包括浮點運算錯誤,還包括溢出及除數(shù)為0等其他所有的算術(shù)錯誤終止
  SIGKILL該信號用來立即結(jié)束程序的運行,并且不能被阻塞、處理或忽略終止
  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)程會收到這個信號忽略
  SIGABORT進(jìn)程異常終止時發(fā)出
  8.3.2 信號發(fā)送與捕捉
  發(fā)送信號的函數(shù)主要有kill()、raise()、alarm()以及pause(),下面就依次對其進(jìn)行介紹。
  1.kill()和raise()
  (1)函數(shù)說明。
  kill()函數(shù)同讀者熟知的kill系統(tǒng)命令一樣,可以發(fā)送信號給進(jìn)程或進(jìn)程組(實際上,kill系統(tǒng)命令只是kill()函數(shù)的一個用戶接口)。這里需要注意的是,它不僅可以中止進(jìn)程(實際上發(fā)出SIGKILL信號),也可以向進(jìn)程發(fā)送其他信號。
  與kill()函數(shù)所不同的是,raise()函數(shù)允許進(jìn)程向自身發(fā)送信號。
  (2)函數(shù)格式。
  表8.7列出了kill()函數(shù)的語法要點。
  表8.7 kill()函數(shù)語法要點
  所需頭文件#include 《signal.h》
  #include 《sys/types.h》
  函數(shù)原型int kill(pid_t pid, int sig)
  函數(shù)傳入值pid:正數(shù):要發(fā)送信號的進(jìn)程號
  0:信號被發(fā)送到所有和當(dāng)前進(jìn)程在同一個進(jìn)程組的進(jìn)程
  -1:信號發(fā)給所有的進(jìn)程表中的進(jìn)程(除了進(jìn)程號最大的進(jìn)程外)
  《-1:信號發(fā)送給進(jìn)程組號為-pid的每一個進(jìn)程
  sig:信號
  函數(shù)返回值成功:0
  出錯:-1
  表8.8列出了raise()函數(shù)的語法要點。
  表8.8 raise()函數(shù)語法要點
  所需頭文件#include 《signal.h》
  #include 《sys/types.h》
  函數(shù)原型int raise(int sig)
  函數(shù)傳入值sig:信號
  函數(shù)返回值成功:0
  出錯:-1
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關(guān)電源基礎(chǔ)知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發(fā)板設(shè)計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費