青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 1  文章 - 0  trackbacks - 0
<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

  •  

最新評(píng)論

信號(hào)是傳送給進(jìn)程的一種事件通知,生成信號(hào)的事件有三大類:

1.       程序錯(cuò)誤:除零,非法內(nèi)存訪問(wèn)

2.       外部信號(hào):終端Ctrl-C產(chǎn)生SGINT信號(hào),定時(shí)器到期產(chǎn)生SIGALRM…

3.       顯示請(qǐng)求:kill函數(shù)允許進(jìn)程發(fā)送任何信號(hào)給其他進(jìn)程或進(jìn)程組。

信號(hào)生成既可以是同步的(信號(hào)與程序中的某個(gè)具體操作相關(guān)并在那個(gè)操作同時(shí)產(chǎn)生),也可以是異步的。通常程序錯(cuò)誤生成信號(hào)為同步的,進(jìn)程顯式請(qǐng)求給自己的信號(hào)也是同步的。

外部事件總是異步的,來(lái)自其他進(jìn)程的顯示請(qǐng)求也是異步的。

信號(hào)發(fā)生時(shí),我們可以告訴unix內(nèi)核采取下面三種動(dòng)作中的任一種:

1.       忽略信號(hào):大部分信號(hào)可被忽略,除SIGSTOPSIGKILL信號(hào)外(這是超級(jí)用戶殺掉或停掉任意進(jìn)程的手段)。

2.       捕獲信號(hào):注冊(cè)信號(hào)處理函數(shù),它對(duì)產(chǎn)生的特定信號(hào)做處理。

3.       讓信號(hào)默認(rèn)動(dòng)作起作用:unix內(nèi)核定義的默認(rèn)動(dòng)作,有5種情況:

a)         流產(chǎn)abort:終止進(jìn)程并產(chǎn)生core文件。

b)        終止stop:終止進(jìn)程但不生成core文件。

c)         忽略:忽略信號(hào)。

d)        掛起suspend:掛起進(jìn)程。

e)         繼續(xù)continue:若進(jìn)程是掛起的,則resume進(jìn)程,否則忽略此信號(hào)。

任意時(shí)刻,進(jìn)程可以為信號(hào)指定動(dòng)作。

信號(hào)處理涉及兩個(gè)過(guò)程,生成與交付。

信號(hào)生成出現(xiàn)在事件發(fā)生時(shí),此時(shí)內(nèi)核檢查接收進(jìn)程的相關(guān)數(shù)據(jù)結(jié)構(gòu),此結(jié)構(gòu)中記錄了信號(hào)的布局,懸掛信號(hào)集和處理動(dòng)作。如果信號(hào)是要被忽略的,內(nèi)核不做任何動(dòng)作就返回。否則,將此信號(hào)加入懸掛信號(hào)集合中。(懸掛信號(hào)集合通常用位串表示,每位對(duì)應(yīng)一個(gè)信號(hào),內(nèi)核無(wú)法記錄同一信號(hào)的多個(gè)實(shí)例)。

       如果進(jìn)程處于可中斷的睡眠狀態(tài),并且該信號(hào)非阻塞,內(nèi)核喚醒進(jìn)程。被喚醒進(jìn)程一旦運(yùn)行則在返回用戶態(tài)前優(yōu)先處理懸掛信號(hào),當(dāng)有懸掛信號(hào)并且非阻塞時(shí),內(nèi)核查看是否有處理句柄,如果沒(méi)有注冊(cè)句柄,則采取默認(rèn)動(dòng)作(通常為終止進(jìn)程)。如果有句柄,則將此信號(hào)加入阻塞信號(hào)屏蔽中。

       最后內(nèi)核安排進(jìn)程返回到用戶態(tài)并執(zhí)行信號(hào)句柄,同時(shí)保證句柄執(zhí)行完時(shí),進(jìn)程從被中斷處代碼執(zhí)行。

       由異步事件產(chǎn)生的信號(hào)可能在任一條指令后發(fā)生,當(dāng)信號(hào)句柄完成時(shí),進(jìn)程從中斷之處起執(zhí)行。如果信號(hào)是在進(jìn)程處于系統(tǒng)調(diào)用期間到達(dá)的,內(nèi)核通常abort此系統(tǒng)調(diào)用并返回錯(cuò)誤碼EINTR

       進(jìn)程可以有選擇的阻塞信號(hào)交付,當(dāng)一個(gè)被阻塞的信號(hào)生成時(shí),如果進(jìn)程指定的動(dòng)作為默認(rèn)或者捕獲,則此信號(hào)一直懸掛于該進(jìn)程直到對(duì)此信號(hào)的阻塞放開(kāi),或者信號(hào)動(dòng)作改為忽略。 系統(tǒng)對(duì)阻塞信號(hào)的判定是在信號(hào)交付時(shí)而非生成時(shí),這樣可以允許進(jìn)程在信號(hào)被交付前改變信號(hào)動(dòng)作。

       每個(gè)進(jìn)程有一個(gè)阻塞信號(hào)屏蔽,它定義當(dāng)前被阻塞交付的那些信號(hào)。可認(rèn)為它是一個(gè)位串,每位對(duì)應(yīng)一個(gè)信號(hào)。如果某信號(hào)對(duì)應(yīng)的位被設(shè)置,則該信號(hào)當(dāng)前阻塞,進(jìn)程可調(diào)用

sigprocmask函數(shù)來(lái)檢查或設(shè)置屏蔽。


 

程序錯(cuò)誤類信號(hào):默認(rèn)動(dòng)作使進(jìn)程流產(chǎn),產(chǎn)生core文件。

SIGABRT   調(diào)用abort函數(shù)生成的信號(hào)。

SIGFPE      浮點(diǎn)計(jì)算錯(cuò)誤。

SIGILL      非法指令錯(cuò)誤。

SIGBUS/SIGSEGV 硬件錯(cuò)誤-非法地址訪問(wèn)。

SIGEMT    硬件錯(cuò)誤

SIGSYS:       非法系統(tǒng)調(diào)用。

SIGTRAP   硬件錯(cuò)誤(通常為斷點(diǎn)指令)。

 

程序終止類信號(hào):默認(rèn)動(dòng)作使進(jìn)程終止,我們通常要處理這類信號(hào),做一些清理工作,句柄函數(shù)應(yīng)在結(jié)束時(shí)為此信號(hào)指定默認(rèn)動(dòng)作,然后再次生成該信號(hào),使得程序終止。

SIGHUP:終端斷開(kāi)連接時(shí),生成此信號(hào)給控制進(jìn)程。

SIGINTCtrl-CDelete按下時(shí),由終端驅(qū)動(dòng)生成,并發(fā)送給前臺(tái)進(jìn)程組中的所有進(jìn)程。

SIGKILL:使程序立即終止,不能被捕獲或忽略,也不能被阻塞。

SIGQUITCtrl-\,SIGINT,并且產(chǎn)生core

SIGTERM:該信號(hào)使程序終止,但是可以阻塞、捕獲、忽略。

 

鬧鐘類信號(hào):通知定時(shí)器到期,默認(rèn)動(dòng)作是終止程序,但通常會(huì)設(shè)置句柄。

SIGALRMalarm/setitimer函數(shù)設(shè)置定時(shí)到期后,會(huì)產(chǎn)生此信號(hào)。

SIGPROF

SIGVTALRM

 

I/O類信號(hào):通知進(jìn)程在描述字上發(fā)生了感興趣事件,支持信號(hào)驅(qū)動(dòng)IO

SIGIO fd準(zhǔn)備執(zhí)行輸入輸出時(shí)發(fā)送此信號(hào)。

SIGPOLL:異步I/O信號(hào)。

SIGURG:網(wǎng)絡(luò)收到帶外數(shù)據(jù)時(shí)可選擇生成此信號(hào)。

 

作業(yè)控制類信號(hào):

SIGCHLD   進(jìn)程終止或停止時(shí)會(huì)向其父進(jìn)程發(fā)送該信號(hào),默認(rèn)動(dòng)作為忽略。

SIGCONT:     使停止的進(jìn)程恢復(fù)運(yùn)行。

SIGSTOP:      停止進(jìn)程。

SIGTSTP/SIGTTIN/SIGTTOU:

 

操作錯(cuò)誤類信號(hào):默認(rèn)動(dòng)作終止程序。

SIGPIPE    管道破裂。

SIGXCPU/SIGXFSZ

 

signal函數(shù):

void (* signal(int sig, void (*func)(int)))(int);

sig指明是哪一種信號(hào)。

func指明動(dòng)作:SIG_DFL SIG_IGN,或者信號(hào)句柄地址。

當(dāng)信號(hào)發(fā)生時(shí),如果func指向信號(hào)句柄,系統(tǒng)在將控制轉(zhuǎn)往句柄前,先將該信號(hào)動(dòng)作置為DFL,或者阻塞該信號(hào)直到句柄完成。

Signal函數(shù)返回值指向前一次有效動(dòng)作指針:SIG_DFL,SIG_IGN,或信號(hào)地址,這提供了恢復(fù)信號(hào)動(dòng)作的機(jī)制。 如果signal調(diào)用出錯(cuò),返回SIG_ERR并設(shè)置errno

 

進(jìn)程初啟時(shí)的信號(hào)動(dòng)作:

fork:繼承父進(jìn)程的動(dòng)作

exec:所有信號(hào)動(dòng)作要么是忽略要么是默認(rèn)。

 

不可靠信號(hào):

早期版本Unix中使用signal,每當(dāng)信號(hào)交付時(shí),其動(dòng)作總是由系統(tǒng)重置為默認(rèn)動(dòng)作,因此為了使信號(hào)句柄執(zhí)行期間,仍能對(duì)同一信號(hào)后續(xù)做反應(yīng),需要再次調(diào)用signal

Catch_Signal(){

       // 如果第二次信號(hào)剛好在此時(shí)發(fā)生,將導(dǎo)致進(jìn)程終止core掉。

       signal(SIGQUIT,Catch_Signal);

}

Main(){                   

       signal(SIGQUIT, Catch_Signal);

      

}

使用signal的另一個(gè)問(wèn)題是,對(duì)于信號(hào),進(jìn)程要么忽略,要么捕獲,無(wú)法在一段時(shí)間內(nèi)阻塞信號(hào)(推遲信號(hào)的交付),為了克服signal兼容性問(wèn)題,現(xiàn)代unix均實(shí)現(xiàn)了POSIX定義的sigaction函數(shù),該函數(shù)采用一個(gè)sigaction結(jié)構(gòu),除定義信號(hào)交付時(shí)要采取的動(dòng)作外,還包含其他一些動(dòng)作控制信息。

sigaction還允許調(diào)用進(jìn)程檢測(cè)或指定與特定信號(hào)相關(guān)的動(dòng)作。

int sigaction(int sig, const struct sigaction* act, struct sigaction* oact);

sig指定信號(hào)-SIGKILLSIGSTOP

如果actNULL,則不改變信號(hào)動(dòng)作,只查詢當(dāng)前動(dòng)作。

成功返回0,失敗則不安裝新信號(hào)動(dòng)作,返回-1,設(shè)置errno

struct sigaction{

       void *sa_handler(int);                        // signal的第二參數(shù)func          

       void (*sa_sigaction)(int, siginfo_t*, void*); // 僅當(dāng)flags設(shè)置SA_SIGINFO起作用。

       sigset_t sa_mask;    // 指明信號(hào)執(zhí)行期間要阻塞的一組信號(hào),除此之外導(dǎo)致信號(hào)句柄執(zhí)

行的信號(hào)也自動(dòng)阻塞,除非指定了SA_NODEFER。信號(hào)句柄正常返回時(shí),屏蔽恢復(fù)到原先狀態(tài)。          

       int sa_flags;           //

}

sa_flags是一個(gè)位串,可以通過(guò)或運(yùn)算生成。可設(shè)置下列標(biāo)志:

SA_NOCLDSTOP: 只對(duì)CHLD信號(hào)起作用,子進(jìn)程暫停時(shí)不發(fā)信號(hào)給父進(jìn)程。

SA_RESTART: 信號(hào)句柄返回時(shí),自動(dòng)恢復(fù)被該信號(hào)中斷的系統(tǒng)調(diào)用。否則該系統(tǒng)調(diào)用將中斷返回-1,并設(shè)置errnoEINTR

SA_ONSTACK:

SA_RESETHAND:信號(hào)句柄入口,系統(tǒng)將重置信號(hào)動(dòng)作為SIG_DFL.

SA_NODEFER:句柄執(zhí)行期間,不自動(dòng)阻塞該信號(hào)。

SA_NOCLDWAIT:只對(duì)CHLD起作用,調(diào)用進(jìn)程的所有子進(jìn)程在終止時(shí)不會(huì)成為Zombe。這種情況下,父進(jìn)程無(wú)需要wait子進(jìn)程,并且子進(jìn)程終止也不向父進(jìn)程發(fā)SIGCHLD信號(hào)。

如果父進(jìn)程調(diào)用wait,將阻塞到所有子進(jìn)程終止,并返回-1errno設(shè)為ECHILD.

SA_SIGINFO:如果未設(shè)置此標(biāo)志,則信號(hào)句柄原型為:

 void func(int signo);

如果設(shè)置此標(biāo)志,則句柄原型為:

void func(int signo, singinfo_t* info, void* context);

Info- 解釋信號(hào)生成的原因。

Context-信號(hào)被交付時(shí)所中斷進(jìn)程的上下文。

一旦用sigaction為特定信號(hào)建立了動(dòng)作,該動(dòng)作就一直保持,直到另一次調(diào)用sigaction,或者調(diào)用exec,或者因設(shè)置了SA_RESETHAND導(dǎo)致系統(tǒng)自動(dòng)改變動(dòng)作為默認(rèn)為止。

 

除了外部中斷產(chǎn)生信號(hào)外,程序可以顯式的調(diào)用raise函數(shù)給他自己發(fā)送信號(hào),或調(diào)用kill向自己或其他進(jìn)程發(fā)送信號(hào)。

 

阻塞信號(hào)意味著保持該信號(hào)并推遲它的交付,可以防止程序中的關(guān)鍵代碼被信號(hào)中斷。

信號(hào)集操作:

int sigemptyset(sigset_t* set); // 清空信號(hào)集

int sigfillset(sigset_t* set);   // 包含所有信號(hào)集

sigaddset/sigdelset/sigismember;

sigprocmask用來(lái)檢測(cè)或改變調(diào)用進(jìn)程的信號(hào)屏蔽。

int sigprocmask(int how, const sigset_t* set, sigset_t* oset);

How: SIGBLOCK SIG_UNBLOCK   SIG_SETMASK

如果調(diào)用sigprocmask放開(kāi)某個(gè)信號(hào)而導(dǎo)致任何懸掛信號(hào)被解除阻塞,則函數(shù)返回前,這些信號(hào)中至少有一個(gè)被交付。

檢查懸掛信號(hào):int sigpending(sigset_t* set);

等待信號(hào):int pause(void);

懸掛調(diào)用進(jìn)程直到有一個(gè)信號(hào)到達(dá)。僅當(dāng)句柄執(zhí)行并返回時(shí),pause函數(shù)才返回:此時(shí)返回-1,并設(shè)置errnoEINTR。所有其他情況下pause不返回。

 

如果多個(gè)相同信號(hào)在信號(hào)句柄運(yùn)行前發(fā)給了進(jìn)程,則句柄只被運(yùn)行一次。換句話說(shuō),默認(rèn)情況下unix信號(hào)是非排隊(duì)的,只有當(dāng)實(shí)現(xiàn)支持實(shí)時(shí)信號(hào)并且sa_flags設(shè)置SA_SIGINFO時(shí),由sigqueue生成的后續(xù)信號(hào)才排隊(duì)。

 

I/O執(zhí)行期間,有可能到達(dá)信號(hào),此時(shí)有兩種情況:重新開(kāi)始系統(tǒng)調(diào)用還是返回失敗.

早期unix特征為,進(jìn)程執(zhí)行慢系統(tǒng)調(diào)用期間捕獲信號(hào)時(shí),該調(diào)用被中斷并設(shè)置errnoEINTR。現(xiàn)代unix增加了sa_flags選項(xiàng)SA_RESTART可對(duì)單個(gè)信號(hào)要求自動(dòng)恢復(fù)被中斷的系統(tǒng)調(diào)用。

原則如下:如果進(jìn)程阻塞于慢系統(tǒng)調(diào)用,并且進(jìn)程捕獲信號(hào)且該信號(hào)句柄返回,系統(tǒng)調(diào)用可能返回EINTR 雖然有些unix能自動(dòng)恢復(fù)系統(tǒng)調(diào)用,但是為了兼容性,我們必須準(zhǔn)備慢系統(tǒng)調(diào)用返回EINTR,當(dāng)檢測(cè)到EINTR,要么重新開(kāi)始系統(tǒng)調(diào)用,要么做其他處理。

Again

       if (n=read(fd,buff, BUFSIZE) < 0) {

              if (errno ==EINTR)

                     goto Again;

              else

                     …}

posted @ 2008-06-30 09:19 powervv 閱讀(3408) | 評(píng)論 (0)編輯 收藏
僅列出標(biāo)題  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产在线一区二区三区四区| 欧美色123| 国产精品一区二区三区久久久| 国产一区二区电影在线观看| 亚洲校园激情| 亚洲精品123区| 亚洲综合日韩| 国产精品福利在线观看| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久伊伊香蕉| 国产一区二区三区无遮挡| 欧美一区二区三区在线看 | 欧美日韩一区二区国产| 国产精品久久久久9999| 一区二区三区四区五区精品| 亚洲激情视频网站| 免费短视频成人日韩| 黄页网站一区| 欧美凹凸一区二区三区视频| 亚洲欧美日韩一区二区三区在线观看| 欧美性淫爽ww久久久久无| 制服丝袜激情欧洲亚洲| 一本色道久久综合狠狠躁篇怎么玩 | 伊人伊人伊人久久| 久久欧美中文字幕| 亚洲午夜高清视频| 国产精品美女久久久久久久| 欧美一区二区免费观在线| 欧美一区不卡| 国语精品中文字幕| 欧美1区视频| 久久久精品国产一区二区三区| 黄色成人av网| 亚洲日本欧美日韩高观看| 亚洲七七久久综合桃花剧情介绍| 欧美午夜视频| 久久综合久久综合久久| 久久综合久久综合这里只有精品| 一本色道久久88综合亚洲精品ⅰ| 日韩一区二区福利| 国产视频一区二区在线观看| 男女精品视频| 欧美日韩一区精品| 毛片基地黄久久久久久天堂| 欧美绝品在线观看成人午夜影视 | 亚洲影院免费观看| 国产在线精品自拍| 亚洲成色最大综合在线| 国产精品露脸自拍| 嫩草成人www欧美| 欧美日韩一区在线观看| 久久免费视频在线观看| 欧美日本国产视频| 久久中文在线| 欧美三区在线视频| 美日韩精品免费观看视频| 免费久久99精品国产自在现线| 亚洲国产免费| 在线一区二区三区做爰视频网站| 国产精品久久久久久av下载红粉| 久久精品国产99| 欧美日韩一区二区精品| 久久亚洲欧美国产精品乐播| 欧美三级日韩三级国产三级| 美女主播精品视频一二三四| 国产精品九九久久久久久久| 欧美激情1区2区| 国产在线拍偷自揄拍精品| 欧美国产激情| 精品成人国产在线观看男人呻吟| 亚洲无玛一区| 亚洲线精品一区二区三区八戒| 美日韩精品免费| 欧美69视频| 国产真实久久| 亚洲一区在线播放| 亚洲一区二区三区成人在线视频精品 | 国产亚洲在线| 亚洲图片你懂的| 一道本一区二区| 欧美成人午夜激情视频| 欧美成人精品福利| 韩曰欧美视频免费观看| 亚洲欧美日韩综合国产aⅴ| 亚洲欧美日韩一区在线| 欧美性一二三区| 日韩一级裸体免费视频| 一区二区三区|亚洲午夜| 免费影视亚洲| 亚洲激情在线观看视频免费| 国产无一区二区| 中文亚洲免费| 亚洲女人天堂成人av在线| 欧美日本国产一区| 99国产精品99久久久久久| 宅男精品视频| 欧美三级视频在线| 一区二区三区四区五区精品视频| 亚洲少妇一区| 欧美色精品天天在线观看视频| 亚洲精品一区二区三区在线观看 | 久久影音先锋| 亚洲高清不卡av| 99视频有精品| 国产精品久久一区二区三区| 亚洲午夜久久久| 久久精选视频| 亚洲激情视频网| 欧美日韩午夜精品| 日韩一区二区久久| 欧美一区二视频| 91久久国产自产拍夜夜嗨| 美国成人直播| 亚洲欧美国产精品va在线观看| 久久精品成人| 亚洲欧洲精品天堂一级| 欧美天堂亚洲电影院在线播放| 中日韩美女免费视频网站在线观看| 欧美一区二区三区四区夜夜大片| 国产一区观看| 久久综合激情| 亚洲视频福利| 欧美黄色片免费观看| 亚洲在线观看免费视频| 国产美女精品免费电影| 久久亚洲高清| 一区二区欧美日韩视频| 毛片基地黄久久久久久天堂| 亚洲小少妇裸体bbw| 在线精品视频一区二区| 国产精品久久久久久久久久久久久| 欧美一级大片在线观看| 99re66热这里只有精品3直播| 久久成人18免费网站| 亚洲国产国产亚洲一二三| 国产精品视频xxx| 欧美精品午夜| 久久综合九色九九| 午夜精品一区二区三区在线| 91久久久在线| 你懂的国产精品| 久久国产成人| 亚洲专区一二三| 国产一区自拍视频| 老牛嫩草一区二区三区日本| 亚洲精品视频免费观看| 久久久在线视频| 欧美中文在线观看| 亚洲一区中文字幕在线观看| 亚洲免费黄色| 韩国美女久久| 1769国内精品视频在线播放| 国产亚洲毛片在线| 国产精品视频免费| 国产精品久久久久久久午夜片| 欧美激情小视频| 欧美成人激情视频| 久久综合狠狠综合久久综合88| 欧美一区视频| 亚洲性感激情| 99成人在线| av72成人在线| 亚洲一二三区在线观看| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲国产成人精品久久久国产成人一区| 久久综合精品国产一区二区三区| 欧美在线亚洲| 久久久蜜桃一区二区人| 久久久91精品国产一区二区三区 | 麻豆91精品91久久久的内涵| 久久精品亚洲一区二区三区浴池| 欧美一区二区在线看| 欧美在线亚洲在线| 久久精品五月| 亚洲午夜久久久| 久久久久久9| 欧美成人亚洲| 欧美日韩在线高清| 国产麻豆综合| 韩日欧美一区| 亚洲乱码国产乱码精品精天堂| 亚洲精品日韩激情在线电影| 国产一区二区三区的电影| 国产亚洲精品久久久久婷婷瑜伽 | 欧美在线影院| 免费久久99精品国产自| 久久精品毛片| 欧美日韩一区二区三区| 国产精品社区| 一区免费观看视频| 91久久久久久久久| 亚洲人成网站影音先锋播放| 一区二区高清在线观看| 久久99伊人| 欧美大片免费观看在线观看网站推荐| 久久久久久9| 夜夜嗨av一区二区三区中文字幕| 亚洲女与黑人做爰| 欧美不卡高清| 国产欧美激情|