




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
bylinux信號基本概異步事件的響應(yīng):進(jìn)程執(zhí)行代碼的過可以隨時被打斷,然后去執(zhí)行異常處理程序鬧鐘發(fā)出中斷信號,把書合好(第20頁),去廚房把開水事情處理好,重新打20cpu中斷可以(可以。CPU運行程序錯誤或執(zhí)行內(nèi)部程序調(diào)用引起的一種中斷,也稱為軟件x86INTARMUNIX信號是因為某些錯誤條件而產(chǎn)生的,比如內(nèi)存段、浮點處理器錯誤或者(2)信號處理程序是在用戶態(tài)下運行的,而中斷處理程序是在態(tài)下信號名 描SIGABRT6SIGALRM警告鐘 SIGHUP 指 終端中斷 SIGPIPE向沒有讀者的管道寫入數(shù)據(jù)SIGSEGVSIGQUIT終端退出 SIGTERM終止SIGUSR1SIGUSR2SIGCHLD子進(jìn)程已經(jīng)停止或退出SIGCONT如果被停止則繼續(xù)執(zhí)行SIGSTOP停止執(zhí)行SIGTSTPSIGTOUT進(jìn)程請求進(jìn)行寫操SIGTTIN進(jìn)程請求進(jìn)行讀操kill Man7signal1SIGKILL、SIGSTOP(2個信信號的默認(rèn)操作:通過man7signal進(jìn)程查看man7編程實踐:讓應(yīng)用程序捕捉ctrl+cctrl+cctrl+csignalsignalsignal函數(shù),作用1:站在應(yīng)用程序的角度,一個信號處理函數(shù)。2:忽略信號、設(shè)置信號默認(rèn)處理信號的安裝和恢復(fù)typedefvoid(*sighandler_t)#defineSIG_ERR((sighandler_t)-#defineSIG_DFL((sighandler_t)#defineSIG_IGN((sighandler_t)函數(shù)原型sighandler_tsignal(intsignum,sighandler_tsignumhandler給handlerint類型的參數(shù)(即接收到的信號代碼,它void 該信 編程實踐SIGINT、intmain(void){sighandler_t//sighandler_t*oldHandle; oldHandle=signal(SIGINT,myhandle);if(oldHandle==SIG_ERR){perror("funcsignalerr\n");return0;}printf("ifuentera,resetsignal\n");while(getchar()!='a'){;}//aif(signal(SIGINT,oldHandle)=={perror("funcsignalerr\n");return0;}if(signal(SIGINT,SIG_DFL)=={perror("funcsignalerr\n");return0;}while(1);return}注意:signalRETURNThesignal()functionreturnsthepreviousvalueofthesignalhandler,orSIG_ERR不可靠信號PKlinuxunixunix系統(tǒng)中的信號機(jī)制比較簡單和原始,后來在實踐中出一些問題,它的主要問題是:signal(),重新安裝該信號。unix下的不可靠信號主要指的是進(jìn)程可能對信號做出錯誤的反應(yīng)以linux上的實現(xiàn)。因此,linux下的不可靠信號問題主要指的是信號可能丟失。能丟失。linux1做了優(yōu)化。號的發(fā)送和安裝也出現(xiàn)了新版本:信號發(fā)送函數(shù)sigqueue()及信號安裝函數(shù)總結(jié):sigactionsignaldo_signal早期Unix系統(tǒng)只定義了32Rethat7.2支持640-32CTRL+CSIGINT信號,對該信號的默認(rèn)反應(yīng)就是進(jìn)程終止。后32個信號表示實時信號,等同于前面闡述的可靠信POSIX標(biāo)準(zhǔn)的一部分,Man7signalkillKillkillIntkill(pid_tpid,intsiq)intraise(intsigno)Intkill(pid_tpidintsiq)kill(pid_tpid,intsiq)pid>0sigpidpid=0sigpid=-1將信號sig發(fā)送給所有進(jìn)程,調(diào)用者進(jìn)程限發(fā)送的每一個進(jìn)程(除了1號pid<-1sigpid(絕對值)//(getpgrp()pid)結(jié)論:注意,如果在fork之前安裝信號,則子進(jìn)程可以繼承信號。killsleepsleepsleepraise(),,,pauseschedule()linux進(jìn)程調(diào)度pause使調(diào)用者進(jìn)程掛起,直到一個信號alarmlinuxnSIGALRMalarm-setanalarmclockfordeliveryofasignal#includeunsignedintalarm(unsignedintseconds);alarm()arrangesforaSIGALRMsignaltobedeliveredtotheprocessinsecondsIfsecondsiszero,nonewalarm()isInanyeventanypreviouslysetalarm()is1alarmkill-ALRMkill-14kill-SIGALRMkill-alram`ps-aux|grep01aram|grep-vvi|awk'{print$2}' {printf("recvsignalidnum:%d\n",//kill-alram`ps-aux|grep01aram|grep-vvi|awk'{print$2}'`}int{ //信號處理函if(signal(SIGALRM,myhandle)=={perror("funcsignalerr\n");return0;}{}return}(1(2)(3)man))linux(Delivery(Pending(block11代表未決,0代表信號可以抵達(dá)了;說明3)向進(jìn)程發(fā)送SIGINT,內(nèi)核首先判斷狀態(tài)字是否阻塞,信號未決狀態(tài)(pending1;若阻塞解除,信號未決狀態(tài)字(pending)0;表示4)block狀態(tài)字、pending5)block狀態(tài)字用戶可以讀寫,pending狀態(tài)字用戶只能讀;這是信號設(shè)計機(jī)制。164bit,編程時,如何表示狀態(tài)字那?2:blockapi?3:pendingapi?#includeintsigemptyset(sigset_t*set);64bit/8=8intsigfillset(sigset_t*set);intsigaddset(sigset_t*setintsigno);signointsigdelset(sigset_t*setintsigno);signointsigismember(constsigset_t*set,intsigno);//signosigprocmask或更改進(jìn)程的狀態(tài)字#includeintsigprocmask(inthow,constsigset_t*set,sigset_t功能:或更改進(jìn)程的字如果oset是非空指針,則進(jìn)程的當(dāng)前字通過oset參數(shù)傳出。如果set是非空指針,則更改進(jìn)程的字,參數(shù)how指示如何更改。如果oset和set都是非空指針,則先將原來的字備份到oset里,然后根據(jù)set和how參數(shù)更改字。假設(shè)當(dāng)前的字為mask,下表說明了how參how說明:SIG_BLOCKsetblocksigpending-examinependingsignals#includeintsigpending(sigset_t*set); returnsthesetofsignalsthatarependingfordeliverytothecallingthread(i.e.,thesignalswhichhavebeenraisedwhile ThemaskofpendingsignalsreturnedinSIGINTSIGINT信號解除阻塞,查看未決關(guān)鍵字(通過ctrl+\SIGQUIT解除阻塞voidhandler(int{if(sig==printf("recvasig=%d\n",sig);elseif(sig==SIGQUIT){sigset_t//ctr+\用來接觸SIGINT//}}{intfor(i=1;i<NSIG;{if(sigismember(set,i))}}//3連續(xù)的按ctrl+cSIGINT信號,但是因為信號是不穩(wěn)定的,只保//intmain(intargc,char{sigset_tpset;//if(signal(SIGINT,handler)==SIG_ERR)ERR_EXIT("signalerror");if(signal(SIGQUIT,handler)==SIG_ERR)ERR_EXIT("signalerror");//或更改進(jìn)程的字這里用來阻塞ctrl+c信//ctrl+c信號被設(shè)置成阻塞,即使用戶按下ctl+cfor{////打印信號未決sigset_t}return}[wbm01@localhost~]$ps-uwbm01|grep"dm01"|awk'{print$1}'[wbm01@localhost~]$kill-9`ps-uwbm01|grep"dm01"|awk'{print$1}'linux()===sigaction函數(shù)信號處理函sigaction包含頭文件 sigaction(intsignum,conststructsigaction*act,conststructsigactionSIGKILLSIGSTOP外的任何(為這兩個信號定義自己的處理函數(shù),將導(dǎo)致信號安裝錯誤sigactionsigaction的oldactoldactNULLsignal(num.,handle)sigaction處理函數(shù)執(zhí)行過應(yīng)掉哪些函數(shù)等等structsigactionvoid //void(*sa_sigaction)(int,siginfo_t*,void*);//信號處理程序能接受額外數(shù)據(jù),和sigqueuesigset_tsa_mask;intsa_flagsSA_SIGINFO();//2:Thesigactionstructureisdefinedassomethinglike會查找、會用man手冊,是通往高手的必經(jīng)Thesiginfo_tparametertosa_sigactionisastructwiththefollowing si_signo;/*Signalnumber*/ si_errno;/*Anerrnovalue*/ si_code;/*Signalcode*/ /*SendingprocessID /*RealuserIDofsendingprocess*/ si_status;/*Exitvalueorsignal*/ /*Usertimeconsumed*/ /*Systemtimeconsumed*/sigval_tsi_value; /*Signalvalue*/ si_int; /*POSIX.1bsignal*/void /*POSIX.1bsignalvoid* /*Memorylocationwhichcausedfault*/ si_band; /*Bandevent*/ /*Filedescriptor}voidhandler(int{printf("recvasig=%d\n",}sighandler_tmy_signal(intsig,sighandler_t{structsigactionact;structsigactionoldact;act.sa_handler=handler;act.sa_flags=0;if(sigaction(sig,&act,&oldact)<0)returnSIG_ERR;return}intmain(intargc,char{structsigactionact;sigset_tsa_mask;act.sa_handler=handler;act.sa_flags=0;//signalfor{}return}2sigactionsigset_tsa_maskstructsigactionvoidvoid(*sa_sigaction)(int,siginfo_t*,void*);sigset_tsa_mask;intvoid}//sigactionsigset_tsa_mask//sigaddset(&act.sa_mask,SIGQUIT);sa_mask(信號處理函intmain(intargc,char{structsigactionact;act.sa_handler=handler;act.sa_flags=0;if(sigaction(SIGINT,&act,NULL)<0)ERR_EXIT("si
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 邢臺醫(yī)學(xué)高等??茖W(xué)校《外科學(xué)各論A》2023-2024學(xué)年第二學(xué)期期末試卷
- 長沙衛(wèi)生職業(yè)學(xué)院《移動互聯(lián)網(wǎng)技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江南省鄲城縣2025年初三2月命制化學(xué)試題含解析
- 浙江省紹興市諸暨市浣江教育集團(tuán)重點中學(xué)2025年初三年級總復(fù)習(xí)質(zhì)量檢測試題(三)物理試題試卷含解析
- 江蘇省南通市海安市八校聯(lián)考2025屆初三下學(xué)期學(xué)習(xí)能力診斷數(shù)學(xué)試題含解析
- 浙江同濟(jì)科技職業(yè)學(xué)院《世界流行文化研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省濟(jì)南市高新區(qū)學(xué)卷A2024-2025學(xué)年數(shù)學(xué)四年級第二學(xué)期期末調(diào)研模擬試題含解析
- 云南交通職業(yè)技術(shù)學(xué)院《農(nóng)業(yè)螨類學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇安全技術(shù)職業(yè)學(xué)院《表演技能訓(xùn)練(武術(shù)表演)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安城市建設(shè)職業(yè)學(xué)院《特色食品制備》2023-2024學(xué)年第一學(xué)期期末試卷
- (三診)綿陽市高中2022級高三第三次診斷性考試地理試卷A卷(含答案)
- 乳腺癌診治指南與規(guī)范(2025年版)解讀
- GB/T 18655-2025車輛、船和內(nèi)燃機(jī)無線電騷擾特性用于保護(hù)車載接收機(jī)的限值和測量方法
- 2025年高壓電工作業(yè)考試國家總局題庫及答案(共280題)
- 2024年中國心力衰竭診斷和治療指南2024版
- 2024年北京中考地理試卷
- JJG 693-2011可燃?xì)怏w檢測報警器
- 廉潔合作承諾書(簡單版)
- 壓力管道安裝質(zhì)量證明書
- 建筑工程中關(guān)鍵工序、特殊工序界定(共3頁)
- ASME規(guī)范中焊縫RT評定法則
評論
0/150
提交評論