linux/unix信號(hào)機(jī)制學(xué)習(xí)-創(chuàng)新互聯(lián)

今天在閱讀《linux內(nèi)核完全剖析-基于0.12內(nèi)核》一書(shū)中信號(hào)(sigal.c)處理這一小節(jié)時(shí)發(fā)現(xiàn)自己原來(lái)對(duì)信號(hào)機(jī)制的理解并不是很到位,通過(guò)查閱資料整理記錄下來(lái)。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的舟曲網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

幾個(gè)概念:
1)信號(hào)是什么:

  一個(gè)信號(hào)就是一個(gè)消息,它通知進(jìn)程一個(gè)某種類型的事件已經(jīng)在系統(tǒng)中發(fā)生了;

  • 用戶在終端按下某些鍵,終端驅(qū)動(dòng)程序會(huì)發(fā)送信號(hào)給前臺(tái)進(jìn)程;例如ctrl-c產(chǎn)生SIGINT信號(hào);ctrl-\產(chǎn)生SIGQUIT信號(hào);ctrl-z產(chǎn)生SIGSTP信號(hào);

  • 硬件異常產(chǎn)生信號(hào);這些信號(hào)由硬件檢測(cè)到并通知內(nèi)核,由內(nèi)核通知當(dāng)前進(jìn)程,例如當(dāng)前進(jìn)程出現(xiàn)除0錯(cuò)誤;

  • kill系統(tǒng)調(diào)用,一個(gè)進(jìn)程可以調(diào)用kill發(fā)送信號(hào)給另一個(gè)進(jìn)程;

  • 內(nèi)核檢測(cè)到某種軟件設(shè)置的條件發(fā)生時(shí)也可能發(fā)信號(hào)給一個(gè)進(jìn)程,例如alarm系統(tǒng)調(diào)用就會(huì)導(dǎo)致出現(xiàn)這樣的場(chǎng)景;

2)阻塞信號(hào)、待處理信號(hào):
  阻塞信號(hào)指的是某個(gè)進(jìn)程阻塞了某個(gè)或某些信號(hào)集;阻塞并不是說(shuō)進(jìn)程不接收指定的信號(hào)集;而是指信號(hào)仍可以被進(jìn)程接收(放入待處理信號(hào)集),但是不處理。從內(nèi)核具體的實(shí)現(xiàn)可以很好的理解;
  內(nèi)核在task_struct中維護(hù)進(jìn)程信號(hào)阻塞向量(block)和pending向量(待處理信號(hào)集);block與pending一一對(duì)應(yīng),對(duì)于某一個(gè)信號(hào):若pending對(duì)應(yīng)bit置位而block復(fù)位,標(biāo)識(shí)信號(hào)已發(fā)生并接收且當(dāng)前未被進(jìn)程阻塞,可以立刻處理(默認(rèn)或用戶自定義信號(hào)處理函數(shù));若pending對(duì)應(yīng)bit復(fù)位而block置位,標(biāo)識(shí)信號(hào)還未被接收到,即使接收到了,那么也被當(dāng)前進(jìn)程阻塞(即不被立刻處理,需要接觸阻塞后才可處理)。。。

3)信號(hào)處理細(xì)微問(wèn)題:

  1. 待處理信號(hào)可能被阻塞:若當(dāng)前進(jìn)程捕捉一個(gè)SIGINT信號(hào),并且當(dāng)前正在運(yùn)行該信號(hào)的處理程序,那么如果另一個(gè)SIGINT信號(hào)傳遞到這個(gè)進(jìn)程,那么個(gè)這個(gè)SIGINT將變成待處理的,直到處理程序返回。

  2. 待處理信號(hào)不會(huì)排隊(duì)等待:這個(gè)我的理解是與內(nèi)核實(shí)現(xiàn)有關(guān)(內(nèi)核一般使用位向量標(biāo)識(shí)信號(hào)集),好像現(xiàn)在linux中有實(shí)時(shí)信號(hào)集是可以排隊(duì)的(以后看到了再學(xué)習(xí)吧。。。)

  3. 系統(tǒng)調(diào)用可以被中斷:一般是對(duì)慢速系統(tǒng)調(diào)用來(lái)說(shuō)的,被中斷的慢速系統(tǒng)調(diào)用在信號(hào)處理程序返回時(shí)不再繼續(xù),而是立即返回用戶一個(gè)錯(cuò)誤條件,并將errno置為EINTR;

4)可移植到信號(hào)處理程序
可移植信號(hào)語(yǔ)義為如下:

  1. 只有這個(gè)處理程序當(dāng)前正在處理的那種類型的信號(hào)被阻塞;

  2. 和所有信號(hào)是實(shí)現(xiàn)一樣,信號(hào)不會(huì)排隊(duì)等待;

  3. 只要可能,被中斷的系統(tǒng)調(diào)用會(huì)重啟;(用戶實(shí)現(xiàn):顯式循環(huán)調(diào)用系統(tǒng)調(diào)用;內(nèi)核實(shí)現(xiàn):恢復(fù)系統(tǒng)調(diào)用參數(shù),讓用戶棧中的eip重新指向系統(tǒng)調(diào)用中斷指令;)

  4. 一旦設(shè)置了信號(hào)處理程序,它就一直保持,直到重新設(shè)置。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:linux/unix信號(hào)機(jī)制學(xué)習(xí)-創(chuàng)新互聯(lián)
分享路徑:http://muchs.cn/article46/csghhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、關(guān)鍵詞優(yōu)化、網(wǎng)站制作、ChatGPT、移動(dòng)網(wǎng)站建設(shè)、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名