




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
信號(hào)引言信號(hào)是軟件中斷信號(hào)提供了一種處理異步事件的方法信號(hào)機(jī)制存在兩種不同時(shí)期的版本,一種是不可靠信號(hào)機(jī)制,另一種是可靠的信號(hào)機(jī)制信號(hào)概念信號(hào)在內(nèi)核中用一個(gè)整數(shù)編號(hào)表示C程序中,信號(hào)有一個(gè)名字,以“SIG”開(kāi)頭現(xiàn)代Unix系統(tǒng)支持多達(dá)30多種不同類型的信號(hào)產(chǎn)生信號(hào)的原因當(dāng)用戶按某些終端鍵時(shí)硬件異常進(jìn)程調(diào)用kill系統(tǒng)調(diào)用當(dāng)檢測(cè)到某種軟件條件已經(jīng)發(fā)生進(jìn)程收到信號(hào)后的動(dòng)作忽略此信號(hào)捕捉信號(hào),執(zhí)行一個(gè)函數(shù)執(zhí)行系統(tǒng)默認(rèn)動(dòng)作忽略暫停終止終止+core常用的一些信號(hào)SIGABRT進(jìn)程異常終止SIGALRM鬧鐘超時(shí)SIGBUS硬件故障SIGCHLD子進(jìn)程終止SIGCONT停止的進(jìn)程繼續(xù)SIGINT按中斷鍵SIGIO有異步IO事件SIGKILL可靠殺死進(jìn)程SIGQUIT按退出鍵SIGSEGV無(wú)效內(nèi)存訪問(wèn)(段違例)SIGSTOP停止運(yùn)行的進(jìn)程SIGSYS無(wú)效的系統(tǒng)調(diào)用SIGTERM終止進(jìn)程(kill默認(rèn)發(fā)出的信號(hào))SIGUSR用戶自定義信號(hào)SIGXCPU進(jìn)程超軟CPU限制關(guān)于core文件有些信號(hào)的默認(rèn)動(dòng)作是“終止+core”,表示,終止進(jìn)程,并且產(chǎn)生進(jìn)程coredumpcore文件是進(jìn)程的內(nèi)存映像信息,通過(guò)core文件可以對(duì)原進(jìn)程進(jìn)行調(diào)試,找出進(jìn)程終止的具體原因signal函數(shù)signal函數(shù)是Unix系統(tǒng)提供的信號(hào)機(jī)制的最簡(jiǎn)單的接口void(*signal(intsigno,void(*func)(int)))(int);signal將用自定義的信號(hào)處理函數(shù)替換指定的信號(hào)的處理函數(shù)這個(gè)函數(shù)定義得非常簡(jiǎn)單,沒(méi)有考慮很多問(wèn)題,是一種不可靠的信號(hào)處理方式一種簡(jiǎn)單的寫法typedefvoidsigfunc(int);
sigfuncsignal(int,sigfunc);一段典型代碼typedefvoidsigfunc(int);staticvoidhandler(intsigno){if(signo==SIGUSR1)printf(“........”);.......}intmain(){sigfunc*old_handler=signal(SIGUSR1,handler);pause();......}信號(hào)引入所面臨的幾個(gè)問(wèn)題不可靠的信號(hào)中斷的系統(tǒng)調(diào)用函數(shù)的重入不可靠的信號(hào)信號(hào)可能會(huì)丟失,一個(gè)信號(hào)發(fā)生了,但進(jìn)程卻一直不知道同時(shí),進(jìn)程對(duì)信號(hào)的控制能力也很弱,它只能捕捉信號(hào)或忽略它,但不能阻塞延緩信號(hào)一段有問(wèn)題的代碼intsig_int(int);...signal(SIGINT,sig_int);...intsig_int(intsigno){signal(SIGINT,sig_int);/*再次設(shè)置處理函數(shù)*/...}早期版本signal的一個(gè)問(wèn)題是,每次接收到信號(hào)對(duì)其處理時(shí),隨即將信號(hào)動(dòng)作恢復(fù)為默認(rèn)動(dòng)作從信號(hào)發(fā)生之后,到信號(hào)處理程序中再次調(diào)用signal函數(shù)之前,這段時(shí)間中有一個(gè)時(shí)間窗口。在此時(shí)間窗口中,可能會(huì)發(fā)生另外一次信號(hào),而第二個(gè)信號(hào)會(huì)導(dǎo)致默認(rèn)動(dòng)作中斷的系統(tǒng)調(diào)用早期Unix系統(tǒng)的一個(gè)特性是:如果進(jìn)程在執(zhí)行一個(gè)低速系統(tǒng)調(diào)用,而阻塞期間捕捉到一個(gè)信號(hào),則該系統(tǒng)調(diào)用就被中斷不再繼續(xù)執(zhí)行,返回一個(gè)特定的錯(cuò)誤信息EINTR系統(tǒng)調(diào)用被分為低速系統(tǒng)調(diào)用和其他系統(tǒng)調(diào)用,低速系統(tǒng)調(diào)用可能使進(jìn)程永遠(yuǎn)阻塞讀某類文件(比如管道、終端、網(wǎng)絡(luò))寫這類文件打開(kāi)某些類型文件(比如終端)pause、wait等函數(shù)某些進(jìn)程間通信系統(tǒng)調(diào)用的自動(dòng)重啟中斷的系統(tǒng)調(diào)用需要程序員在應(yīng)用程序中處理為了幫助應(yīng)用程序使其不必處理被中斷的系統(tǒng)調(diào)用,Unix系統(tǒng)中引入了系統(tǒng)調(diào)用的自動(dòng)重啟注意:不同的系統(tǒng)對(duì)系統(tǒng)調(diào)用的自動(dòng)重啟的配置是不一樣的函數(shù)的可重入問(wèn)題進(jìn)程捕捉到信號(hào)并對(duì)其進(jìn)行處理時(shí),進(jìn)程正在執(zhí)行的指令序列就被信號(hào)處理程序臨時(shí)打斷,它首先執(zhí)行改信號(hào)處理函數(shù)中的指令,并且在信號(hào)處理函數(shù)執(zhí)行完畢后繼續(xù)執(zhí)行被打斷的主程序。如果主程序正在調(diào)用某些函數(shù),而信號(hào)處理函數(shù)也調(diào)用這類函數(shù),就出現(xiàn)了函數(shù)的重入問(wèn)題。重入可能破壞函數(shù)內(nèi)部的數(shù)據(jù)結(jié)構(gòu),導(dǎo)致錯(cuò)誤。函數(shù)能否重入?很多函數(shù)都是不可重入的,也有一些函數(shù)是可重入的。函數(shù)不可重入的原因函數(shù)使用了靜態(tài)數(shù)據(jù)結(jié)構(gòu)函數(shù)調(diào)用了malloc和free可靠的信號(hào)首先,內(nèi)核或者進(jìn)程產(chǎn)生了一個(gè)信號(hào)然后,內(nèi)核將信號(hào)遞送給目標(biāo)進(jìn)程在信號(hào)產(chǎn)生到被遞送之間的時(shí)間間隔內(nèi),信號(hào)是未決的進(jìn)程可以選用信號(hào)遞送阻塞內(nèi)核在遞送一個(gè)原來(lái)被阻塞的信號(hào)時(shí),才決定對(duì)它的處理方式進(jìn)程在信號(hào)遞送給它之前仍可改變對(duì)信號(hào)的動(dòng)作每個(gè)進(jìn)程有一個(gè)信號(hào)屏蔽字定義了對(duì)哪些信號(hào)阻塞sigprocmask函數(shù)sigprocmask函數(shù)可以檢測(cè)和更改進(jìn)程的信號(hào)屏蔽字intsigprocmask(inthow,sigset_t*set,sigset_toset);如果oset非空,那么當(dāng)前屏蔽字通過(guò)oset返回如果set非空,那么how指示如何修改信號(hào)屏蔽字sigpending函數(shù)sigpending函數(shù)返回信號(hào)集,其中的各個(gè)信號(hào)對(duì)于調(diào)用進(jìn)程是阻塞的而不能遞送,因而也一定是當(dāng)前未決的。intsigpending(sigset_t*set);sigaction函數(shù)sigaction函數(shù)檢查或修改與指定信號(hào)相關(guān)聯(lián)的處理動(dòng)作sigaction替代了Unix早期版本使用的signal函數(shù)intsigaction(intsigno,structsigaction*act,sturctsigaction*oact);若act非空,則修改指定信號(hào)動(dòng)作若oact非空,則返回該信號(hào)的上一個(gè)動(dòng)作信號(hào)處理中需要注意的問(wèn)題voidsig_alarm(intsigno){/*donothing*/}voidsleep1(unsignedseconds){signal(SIGALRM,sig_alarm);alarm(seconds);pause();}在alarm和pause之間存在競(jìng)爭(zhēng)條件,可能到導(dǎo)致函數(shù)永遠(yuǎn)不能結(jié)束jmp_bufenv_alarm;voidsig_alarm(intsigno){longjmp(env_a
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黨章黨史國(guó)史國(guó)情知識(shí)競(jìng)賽題庫(kù)及答案(共220題)
- 《單片機(jī)技術(shù)應(yīng)用》 課件
- 節(jié)能環(huán)保居間服務(wù)合同范例
- 道路交通規(guī)劃方案介紹
- 低空經(jīng)濟(jì)行業(yè)報(bào)告
- 醫(yī)院裝修大包合同參考范本
- 投資可行性分析報(bào)告包括哪些內(nèi)容
- 低空經(jīng)濟(jì)涉及的行業(yè)
- 汽車租賃股權(quán)轉(zhuǎn)讓居間合同
- 建筑節(jié)能工程施工方案
- qc工作崗位職責(zé)
- 【體能大循環(huán)】聚焦體能循環(huán)-探索運(yùn)動(dòng)奧秘-幼兒園探究體能大循環(huán)有效開(kāi)展策略課件
- 采購(gòu)人員廉潔從業(yè)課件培訓(xùn)
- 2024年單招計(jì)算機(jī)試題題庫(kù)及答案
- XX藥業(yè)公司受試者日記卡
- 多組學(xué)數(shù)據(jù)的整合與分析
- 小學(xué)安全教育《平安校園 拒絕欺凌》劉偉【省級(jí)】?jī)?yōu)質(zhì)課
- 靜脈輸液的不良反應(yīng)及處理原則考核試題及答案
- 水利設(shè)施維護(hù)投標(biāo)方案(技術(shù)標(biāo))
- 《建筑概論》期末考試試卷附答案
- 中國(guó)銀行供應(yīng)鏈融資
評(píng)論
0/150
提交評(píng)論