linux-day06進(jìn)程間通信07系統(tǒng)編程_第1頁
linux-day06進(jìn)程間通信07系統(tǒng)編程_第2頁
linux-day06進(jìn)程間通信07系統(tǒng)編程_第3頁
linux-day06進(jìn)程間通信07系統(tǒng)編程_第4頁
linux-day06進(jìn)程間通信07系統(tǒng)編程_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余9頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

信號在我們的生活中隨處可見,如:古代中摔杯為號;現(xiàn)代中的信號彈;體育比賽中使用的信號槍他們都有共性:1.簡單2.不能攜帶大量信息3.滿足某個特設(shè)信號是信息的載體,Linux/UNIX通信。Unix早期版本就提供了信號機(jī)制,但不可靠,信號可能丟失。BerkeleyAT&T都對信號模型做了更改,增加了可靠信號機(jī)制。但彼此不兼容。POSIX.1對可靠信號例程進(jìn)行了標(biāo)AB發(fā)送信號,B收到信號之前執(zhí)行自己的代碼,收到信號后,不管執(zhí)行到程序的什與信號相關(guān)的和狀產(chǎn)生信號硬件異常產(chǎn)生,如:內(nèi)存(段錯誤)、除0(浮點(diǎn)數(shù)例外)、內(nèi)存對齊出錯命令產(chǎn)生,如:kill命令未決:產(chǎn)生和遞達(dá)之間的狀態(tài)。主要由于阻塞()導(dǎo)致該狀態(tài)。,未決信號集1,表信號處于未決狀態(tài)。0。這一時刻往往非常短暫。號集。在解除前,信號一直處于未決狀態(tài)。1)2)3)4)5)6)7)8)9)10)11)12)13)14)15)16)17)18)19)20)21)22)23)24)25)26) 27)SIGPROF28)SIGWINCH29)SIGIO30)31) 34)SIGRTMIN35) 36) 37)38)SIGRTMIN+4 39)SIGRTMIN+5 40)SIGRTMIN+6 41)SIGRTMIN+7 43)SIGRTMIN+9 44)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)48)SIGRTMIN+1449)SIGRTMIN+1550)SIGRTMAX-1451)SIGRTMAX-1352)53)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-9 56)SIGRTMAX-8 58)SIGRTMAX-6 59)SIGRTMAX-5 60)SIGRTMAX-4 61)SIGRTMAX-3 64)41.編號2.名稱3.4.默認(rèn)處理動可通過man7signal/usr/src/linux-headers-3.16.0- Hangupdetectedoncontrollingterminalordeathcontrolling Interruptfrom Quitfrom Illegal Floatingpoint Kill Invalidmemory Brokenpipe:writetopipewithno Timersignalfrom User-definedsignal Childstoppedor Continueif Stop Stoptypedat Terminalinputforbackground ThesignalsSIGKILLandSIGSTOPcannotbecaught,blocked,orValuex86、armmips架構(gòu)。一個‘-’表示在對應(yīng)Unix系統(tǒng)內(nèi),也出現(xiàn)在Linux中,而有的信號出現(xiàn)在BSDMacOSLinux下。這里我們只研究Linux系統(tǒng)中的信號。Ign(默認(rèn)即時對該種信號忽略操作Core:終止進(jìn)程,生成Core文件。(查驗(yàn)進(jìn)程原因,用于gdb調(diào)試)man7signalThesignalsSIGKILLandSIGSTOPcannotbecaught,blocked,orignored.9)SIGKILL19)SIGSTOP信號,不允許忽略和捕捉,只能執(zhí)行默認(rèn)動LinuxSIGHUP:當(dāng)用戶退出s 時,由該s SIGABRT:abortcore::0等所有的算法錯誤。默認(rèn)動作為終止進(jìn)程并產(chǎn)生coreSIGUSE1SIGALRM:alarm來要示程序正常退出。執(zhí)行s 命令Kill時,缺省產(chǎn)生這個信號。默認(rèn)動作為終止進(jìn)程。SIGTTOU:該信號類似于SIGTTIN,在進(jìn)程要向終端輸出數(shù)據(jù)時發(fā)生。默認(rèn)動作SIGXCPUCPUSIGVTALRMSIGALRM,但是該信號只計(jì)算該CPU的使用時間。默認(rèn)動作為終止進(jìn)程。SGIPROFSIGVTALRMCPU時間還包括執(zhí)行系統(tǒng)調(diào)34SIGRTMIN~(64SIGRTMAX:LINUX的實(shí)時信號,它們沒有固定的含義(可以由用Ctrl+ →2)SIGINT(終止/中斷) Ctrl 20SIGTSTP(暫停/停止)"TTerminalCtrl 3SIGQUIT(退出除0操作 →8)SIGFPE(浮點(diǎn)數(shù)例外) "F"float浮點(diǎn)數(shù)。內(nèi)存→11)SIGSEGV(段錯誤)總線錯誤7kill函數(shù)/kill命令產(chǎn)生信號:killSIGKILLintkill(pid_tpid,intsig);成功:0;失?。?1(ID,信號,普通用戶殺init進(jìn)程等權(quán)級問題)errnopid pid killpid IDID相同。kill9(rootpid)是不可以的。同樣,普通用戶也不能向其他普通用戶發(fā)送ID==IDraiseabortraise函數(shù):給當(dāng)前進(jìn)程發(fā)送指定信號(自己給自己發(fā))raise(signokill(getpidsigno);intraise(intsig);成功:00值abort6SIGABRTcorevoidabort(void);alarm函unsignedintalarm(unsignedintseconds);0或剩余的秒數(shù),無失敗。alarm(0),返回舊鬧鐘余下秒數(shù)。例:alarm(5)3secalarm(4)5secalarm(5)論進(jìn)程處于何種狀態(tài),alarm都計(jì)時。

【alarmc使用time命令查看程序執(zhí)行的時間 =++setitimer函設(shè)置定時器(鬧鐘)alarmusintsetitimer(intwhich,conststructitimerval*new_value,structitimerval*old_value); 功:0;失?。?1errno①自然定時:ITIMER_REAL→ 計(jì)算自然時間②虛擬空間計(jì)時(用戶空間):ITIMER_VIRTUAL→26)SIGVTALRM 占用cpu的時間③運(yùn)行時計(jì)時(用戶+內(nèi)核):ITIMER_PROF→27)SIGPROF 計(jì)算占用cpu及練習(xí):setitimeralarm1manpageit_interval、it_value提示:it_interval:用來設(shè)定兩次定時任務(wù)之間間隔的時間。00內(nèi)核通過未決信號集來判斷信號是否應(yīng)被處理。字mask可以影響未決信號集。而我們可以在應(yīng)用程序中自定義set來改變mask。已達(dá)到指定信號的目的。 //typedefunsignedlongintsigemptyset(sigset_t*set); 將某個信號集清0 intsigfillset(sigset_t*set); 將某個信號集置1 intsigaddset(sigset_t*set,intsignum); intsigdelset(sigset_t*set,intsignum); intsigismember(constsigset_t*set,intsignum);判斷某個信號是否在信號集中 sigset_t類型的本質(zhì)是位圖。但不應(yīng)該直接使用位操作,而應(yīng)該使用上述函數(shù),保證跨selectsigprocmask用來信號解除也使用該函數(shù)其本質(zhì)或修改進(jìn)程的字(PCB中)intsigprocmask(inthowconstsigset_t*setsigset_t 成功:0;失?。?1how參數(shù)取值:假設(shè)當(dāng)前的字為SIG_BLOCK:當(dāng)how設(shè)置為此值,set表示需要的信號。相當(dāng)于=SIG_UNBLOCK:當(dāng)how設(shè)置為此,set表示需要解除的信號。相當(dāng)mask=mask&SIG_SETMASK:當(dāng)how設(shè)置為此,set表示用于替代原始集的新mask=setsigprocmask解除了對當(dāng)前若干個信號的阻sigprocmask返回前,至少將其中一個信號遞達(dá)。sigpendingintsigpending(sigset_t*set);set傳出參數(shù) signaltypedefvoidsighandler_tsignal(intsignum,sighandler_tANSIUnixLinux中可能有不同的行為。因此應(yīng)該盡量避免使用它,取而代之使用sigaction函數(shù)。void(*signal(intsignum,void(*sighandler_t)(int)))typedefsigactionintsigaction(intsignum,conststructsigaction*act,structsigaction*oldact); ?。?1errnostructsigactionstructsigaction (*sa_sigaction)(int,siginfo_t*,void*); 用①sa_handler:指定信號捕捉后的處理函數(shù)名(即函數(shù))。也可賦值為SIG_IGN表忽略或SIG_DFL表執(zhí)行默認(rèn)動作②sa_mask:調(diào)用信號處理函數(shù)時,所要的信號集合(字)。注意:僅在處理函數(shù)被調(diào)用期間生效,是臨時性設(shè)置。③sa_flags0,表使用默認(rèn)屬性。練習(xí):sigactionsetitimer產(chǎn)生的中斷信號.信號捕捉特進(jìn)程正常運(yùn)行時,默認(rèn)PCB中有一個字,假定為☆,它決定了進(jìn)程自動屏XXX信號捕捉函數(shù)執(zhí)行期間,XXX信號自動被阻塞的常規(guī)信號不支持排隊(duì),產(chǎn)生多次只記錄一次(32個實(shí)時信號支持排隊(duì))1:為某個信號設(shè)置捕捉函數(shù)么只在處理函數(shù)之行結(jié)束后,處理一次。【sigaction2.c】練習(xí)3:驗(yàn)證sa_mask在捕捉函數(shù)執(zhí)行期間的作用。 SIGCHLDSIGCHLDSIGCHLD#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/wait.h>#include<signal.h>voidsys_err(char{}voiddo_sig_child(int{int pid_twhile((pid=waitpid(0,&status,WNOHANG))>0){if(WIFEXITED(status))printf("child%dexit%d\n",pid,WEXITSTATUS(status));elseif(WIFSIGNALED(status))printf("child%dcancelsignal%d\n",pid,}}int{pid_tpid; inti;for(i=0;i<10;i++){if((pid=fork())==0)elseif(pid<}if(pid==0)intn=1;while(n--){printf("childID%d\n",getpid());}return}elseif(pid>0)structsigactionact;act.sa_handler=do_sig_child;act.sa_flags=0;while(1)printf("ParentID%d\n",getpid());}}return}17)SIGCHLD如果每創(chuàng)建一個子進(jìn)程后不使用sleepwhileif

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論