久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久


Linux下的信號機制

分享到:
           

    本文關鍵字: linux 管道通信,linux 進程通信方式,信號

    信號(hao)是在軟件(jian)層次(ci)上(shang)(shang)對中(zhong)(zhong)斷(duan)機制的(de)(de)一(yi)(yi)(yi)種模擬(ni)。在原理(li)上(shang)(shang),一(yi)(yi)(yi)個(ge)進(jin)程(cheng)(cheng)(cheng)收(shou)到一(yi)(yi)(yi)個(ge)信號(hao)與(yu)處理(li)器收(shou)到一(yi)(yi)(yi)個(ge)中(zhong)(zhong)斷(duan)請(qing)求可(ke)以(yi)說是一(yi)(yi)(yi)樣的(de)(de)。信號(hao)是異步的(de)(de),一(yi)(yi)(yi)個(ge)進(jin)程(cheng)(cheng)(cheng)不必通過任何操作來(lai)等待(dai)信號(hao)的(de)(de)到達(da),事(shi)實(shi)上(shang)(shang),進(jin)程(cheng)(cheng)(cheng)也(ye)不知(zhi)(zhi)道(dao)信號(hao)到底什(shen)么時(shi)候到達(da)。信號(hao)可(ke)以(yi)直接進(jin)行(xing)用(yong)(yong)戶(hu)空間(jian)進(jin)程(cheng)(cheng)(cheng)和內核進(jin)程(cheng)(cheng)(cheng)之間(jian)的(de)(de)交(jiao)互,內核進(jin)程(cheng)(cheng)(cheng)也(ye)可(ke)以(yi)利用(yong)(yong)它(ta)來(lai)通知(zhi)(zhi)用(yong)(yong)戶(hu)空間(jian)進(jin)程(cheng)(cheng)(cheng)發生了哪些系統(tong)事(shi)件(jian)。它(ta)可(ke)以(yi)在任何時(shi)候發給(gei)某(mou)一(yi)(yi)(yi)進(jin)程(cheng)(cheng)(cheng),而無(wu)須知(zhi)(zhi)道(dao)該進(jin)程(cheng)(cheng)(cheng)的(de)(de)狀(zhuang)態。如果(guo)該進(jin)程(cheng)(cheng)(cheng)當前并未處于執行(xing)態,則該信號(hao)就(jiu)由內核保存起來(lai),直到該進(jin)程(cheng)(cheng)(cheng)恢復執行(xing)再傳(chuan)(chuan)遞給(gei)它(ta)為(wei)止;如果(guo)一(yi)(yi)(yi)個(ge)信號(hao)被(bei)進(jin)程(cheng)(cheng)(cheng)設置為(wei)阻塞,則該信號(hao)的(de)(de)傳(chuan)(chuan)遞被(bei)延遲,直到其阻塞被(bei)取消(xiao)時(shi)才被(bei)傳(chuan)(chuan)遞給(gei)進(jin)程(cheng)(cheng)(cheng)。

 ;   信(xin)(xin)號是進程間通(tong)(tong)信(xin)(xin)機制(zhi)中唯(wei)一的(de)異步通(tong)(tong)信(xin)(xin)機制(zhi),可(ke)以(yi)看做是異步通(tong)(tong)知,通(tong)(tong)知接收信(xin)(xin)號的(de)進程有哪些事情(qing)發(fa)生了(le)。信(xin)(xin)號機制(zhi)經過Posix實時擴展后,功能更加強大(da),除了(le)基本通(tong)(tong)知功能外,還可(ke)以(yi)傳遞附加信(xin)(xin)息。

    信號事件的發生有兩個來源:硬件來源(如我們按下了鍵盤上的按鈕或者出現其他硬件故障);軟件來源,常用發送信號的系統函數有kill()raise()alarm()、setitimer()和sigqueue()等(deng),軟件來源還包(bao)括(kuo)一(yi)些非法運算(suan)等(deng)操(cao)作。

    進程可以通(tong)過3種方式(shi)來響應(ying)一個信號。

    1.忽略(lve)信號(hao)

    忽略信號(hao)即對信號(hao)不(bu)做任何處理(li),其中,有兩(liang)個信號(hao)不(bu)能忽略:SIGKILL和SIGSTOP。

    2.捕捉信號

    定義信號處(chu)理(li)函數,當(dang)信號發(fa)生(sheng)時,執(zhi)行相應的處(chu)理(li)函數。

    3.執行默認(ren)操(cao)作

    Linux對每種信號(hao)都規定(ding)了默認操(cao)作(zuo),如表1所示。

表1 常見信號的含義及其默認操(cao)作(zuo)

信 號 名 含 義 默 認 操 作
SIGHUP 該信號在用戶終端連接(正常或非正常)結束時發出,通常是在終端的控制進程結束時,通知同一會話內的各個進程與控制終端不再關聯 終止
SIGINT 該信號在用戶輸入INTR字符(通常是Ctrl+C)時發出,終端驅動程序發送此信號并送到前臺進程中的每一個進程 終止
SIGQUIT 該信號和SIGINT類似,但由QUIT字符(通常是Ctrl+\)來控制 終止
SIGILL 該信號在一個進程企圖執行一條非法指令時(可執行文件本身出現錯誤,或者試圖執行數據段、堆棧溢出時)發出 終止
SIGFPE 該信號在發生致命的算術運算錯誤時發出。這里不僅包括浮點運算錯誤,還包括溢出及除數為0等其他所有的算術錯誤 終止
SIGKILL 該信號用來立即結束程序的運行,并且不能被阻塞、處理和忽略 終止
SIGALRM 該信號當一個定時器到時的時候發出 終止
SIGSTOP 該信號用于暫停一個進程,且不能被阻塞、處理或忽略 暫停進程
SIGTSTP 該信號用于交互停止進程,用戶在輸入SUSP字符時(通常是Ctrl+Z)發出這個信號 停止進程
SIGCHLD 子進程改變狀態時,父進程會收到這個信號 忽略

    一個完整的信號生命周期可以分為3個重要階段,這3個階段由4個重要事件來刻畫的:信號產生、信號在進程中注冊、信號在進程中注銷、執行信號處理函數。這里信號的產生、注冊、注銷等是指信號的內部實現機制,而不是信號的函數實現。因此,信號注冊與否與本節后面講到的發送信號函數(如kill()等)及信號安裝函數(如signal()等(deng))無關,只(zhi)與信號值有關。

    相(xiang)鄰兩(liang)個(ge)事件(jian)的(de)時(shi)間間隔(ge)構(gou)成(cheng)信(xin)號生命周期的(de)一(yi)個(ge)階段。要注(zhu)意這里(li)的(de)信(xin)號處理有多種(zhong)方(fang)式,一(yi)般是由(you)內核完成(cheng)的(de),當(dang)然也可以由(you)用戶(hu)進程來(lai)完成(cheng),故在此沒有明確指出。

    信號(hao)的處(chu)理(li)(li)包括信號(hao)的發送、捕(bu)獲及信號(hao)的處(chu)理(li)(li),它(ta)們有各自相對應的常見函數。

    ● 發送信號的函數:kill()、raise()

    ● 捕捉信號的函數:alarm()、pause()

    ● 處理信號的函數:signal()、sigaction()

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱(re)點鏈接:

   1、有名管道(FIFO)
   2、標準流管道
   3、無名管道系統調用
   4、Linux下進程間通信方式-管道
   5、Linux下進程間通信

更多新聞>>