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

隨筆-4  評論-40  文章-117  trackbacks-0


信號與進程是分不開的,而把信號與進程的筆記分開來寫,是因為我覺得這個信號太難搞懂了,特別是APUE信號這一章還把信號結合歷史來介紹弄的我云里霧里。 

信號本質上是在軟件層次上對中斷機制的一種模擬,他有幾種產生方式和處理方式(APUE有介紹),下面帶著疑惑從幾個角度對信號進行介紹 


(一)    站在進程的角度

進程發現和接受信號

我們知道,信號是異步的,一個進程不可能等待信號的到來,也不知道信號會到來,那么,進程是如何發現和接受信號呢?實際上,信號的接收不是由用戶進程來完成的,而是由內核代理。當一個進程P2向另一個進程P1發送信號后,內核接受到信號,并將其放在P1的信號隊列當中。當P1再次陷入內核態時,會檢查信號隊列,并根據相應的信號調取相應的信號處理函數

Task _struct 是進程控制塊(PCB),詳見          http://oss.org.cn/kernel-book/ch04/4.3.htm

 

信號檢測和響應時機

剛才我們說,當P1再次陷入內核時,會檢查信號隊列。那么,P1什么時候會再次陷入內核呢?陷入內核后在什么時機會檢測信號隊列呢?

1.      當前進程由于系統調用、中斷或異常而進入系統空間以后,從系統空間返回到用戶空間的前夕。

2.      當前進程在內核中進入睡眠以后剛被喚醒的時候(必定是在系統調用中),或者由于不可忽略信號的存在而提前返回到用戶空間


進入信號處理函數

 

 


對于sigprocmask 會進入內核空間、pause需要從進入睡眠這兩者都符合檢測處理信號函數的條件,所以存在忽略信號的情況,而APUE講sigsuspend的之后真是晦澀難懂,其實他主要做的工作就是等待一個中斷然后執行相應的handle處理

所以我感覺例子中的

sigsuspend(&zeromask);

sigprocmask(SIG_SETMASK, &oldmask,NULL);

是不是可以直接替換為

Sigsuspend(&oldmask)

因為測試情況難以出現,這里只是個人理解并未得到驗證

 

 

(二)  站在信號自身的角度

 

信號生命周期:

 對于一個完整的信號生命周期(從信號發送到相應的處理函數執行完畢)來說,可以分為三個重要的階段,這三個階段由四個重要事件來刻畫:

1.信號誕生;

2.信號在進程中注冊完畢;

3.信號在進程中的注銷完畢;

4.信號處理函數執行完畢。

相鄰兩個事件的時間間隔構成信號生命周期的一個階段。

 

    詳細描述各個生命周期

1.     信號"誕生"。

信號的誕生指的是觸發信號的事件發生(如檢測到硬件異常、定時器超時以及調用信號發送函數kill()或sigqueue()等)。 

2.      信號在目標進程中"注冊"。

這里注冊定義不是由signal或者sigaction實現的,而是說信號發生之后內核中自動對信號的注冊保存。

進程的task_struct結構中有關于本進程中未決信號的數據成員: 

struct sigpending pending;

struct sigpending

{

    struct sigqueue *head, **tail;

    sigset_t signal;

};

第一、第二個成員分別指向一個sigqueue類型的結構鏈(稱之為"未決信號信息鏈")的首尾,第三個成員是進程中所有未決信號集,信息鏈中的每個sigqueue結構體刻畫一個特定信號所攜帶的信息,并指向下一個sigqueue結構:

struct sigqueue

{

    struct sigqueue *next;

    siginfo_t info;

};

    信號在進程中注冊指的就是信號值加入到進程的未決信號集中(sigpending結構的第二個成員sigset_t signal),并且信號所攜帶的信息被保留到未決信號信息鏈的某個sigqueue結構中。只要信號在進程的未決信號集中,表明進程已經知道這些信號的存在,但還沒來得及處理,或者該信號被進程阻塞。

注: 

    當一個實時信號發送給一個進程時,不管該信號是否已經在進程中注冊,都會被再注冊一次,因此,信號不會丟失,因此,實時信號又叫做"可靠信號"。這意味著同一個實時信號可以在同一個進程的未決信號信息鏈中占有多個sigqueue結構(進程每收到一個實時信號,都會為它分配一個結構來登記該信號信息,并把該結構添加在未決信號鏈尾,即所有誕生的實時信號都會在目標進程中注冊);

當一個非實時信號發送給一個進程時,如果該信號已經在進程中注冊,則該信號將被丟棄,造成信號丟失。因此,非實時信號又叫做"不可靠信號"。這意味著同一個非實時信號在進程的未決信號信息鏈中,至多占有一個sigqueue結構。一個非實時信號誕生后,(1)、如果發現相同的信號已經在目標結構中注冊,則不再注冊,對于進程來說,相當于不知道本次信號發生,信號丟失;(2)、如果進程的未決信號中沒有相同信號,則在進程中注冊自己。在APUE的不可靠信號章節中需要每次重新聲明sinal_hanle函數,這個是說的以前Unix系統的處理,現在可靠不可靠就是上面所說的實時與注冊次數的區別。


3.信號在進程中的注銷。

在目標進程執行過程中,會檢測是否有信號等待處理(每次從系統空間返回到用戶空間時都做這樣的檢查)。(“sigprocmask返回前,也至少會將其中一個未決且未阻塞的信號遞送給進程”)如果存在未決信號等待處理且該信號沒有被進程阻塞,則在運行相應的信號處理函數前,進程會把信號在未決信號鏈中占有的結構卸掉。是否將信號從進程未決信號集中刪除對于實時與非實時信號是不同的。對于非實時信號來說,由于在未決信號信息鏈中最多只占用一個sigqueue結構,因此該結構被釋放后,應該把信號在進程未決信號集中刪除(信號注銷完畢);而對于實時信號來說,可能在未決信號信息鏈中占用多個sigqueue結構,因此應該針對占用gqueue結構的數目區別對待:如果只占用一個sigqueue結構(進程只收到該信號一次),則應該把信號在進程的未決信號集中刪除(信號注銷完畢)。否則,不在進程的未決信號集中刪除該信號(信號注銷完畢)。進程在執行信號相應處理函數之前,首先要把信號在進程中注銷。


4.信號生命終止。

進程注銷信號后,立即執行相應的信號處理函數,執行完畢后,信號的本次發送對進程的影響徹底結束。 


注: 

1)信號注冊與否,與發送信號的函數(如kill()或sigqueue()等)以及信號安裝函數(signal()及sigaction())無關,只與信號值有關(信號值小于SIGRTMIN的信號最多只注冊一次,信號值在SIGRTMIN及SIGRTMAX之間的信號,只要被進程接收到就被注冊)。

2)在信號被注銷到相應的信號處理函數執行完畢這段時間內,如果進程又收到同一信號多次,則對實時信號來說,每一次都會在進程中注冊;而對于非實時信號來說,無論收到多少次信號,都會視為只收到一個信號,只在進程中注冊一次。

 

(三)  進程和信號兩者的角度來看

實際執行信號的處理動作稱為信號遞達(Delivery),信號從產生到遞達之間的狀態,稱為信號未決(Pending)。進程可以選擇阻塞(Block)某個信號。被阻塞的信號產生時將保持在未決狀態,直到進程解除對此信號的阻塞,才執行遞達的動作。注意,阻塞和忽略是不同的,只要信號被阻塞就不會遞達,而忽略是在遞達之后可選的一種處理動作。信號在內核中的表示可以看作是這樣的:

信號在內核中的表示示意圖

 每個信號都有兩個標志位分別表示阻塞和未決,還有一個函數指針表示處理動作。信號產生時,內核在進程控制塊中設置該信號的未決標志,直到信號遞達才清除該標志。在上圖的例子中,

1.      SIGHUP信號未阻塞也未產生過,當它遞達時執行默認處理動作。

2.      SIGINT信號產生過,但正在被阻塞,所以暫時不能遞達。雖然它的處理動作是忽略,但在沒有解除阻塞之前不能忽略這個信號,因為進程仍有機會改變處理動作之后再解除阻塞。

3.      SIGQUIT信號未產生過,一旦產生SIGQUIT信號將被阻塞,它的處理動作是用戶自定義函數sighandler。

 


posted on 2012-02-10 17:49 李陽 閱讀(673) 評論(1)  編輯 收藏 引用 所屬分類: Linux

評論:
# re: Linux 信號 (轉) 2013-05-19 10:18 | cjg
好文,清晰。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            最新日韩欧美| 国内精品一区二区三区| 亚洲深夜福利在线| 一区二区三区精品久久久| 99这里有精品| 亚洲免费人成在线视频观看| 午夜精品久久久久影视| 久久久精彩视频| 免费日韩精品中文字幕视频在线| 欧美岛国激情| 国产精品国产三级国产普通话三级 | 国产精品视频网| 国产综合一区二区| 欧美日韩国产小视频| 亚洲在线中文字幕| 91久久久亚洲精品| 亚洲欧美www| 欧美 日韩 国产 一区| 亚洲六月丁香色婷婷综合久久| 亚洲午夜在线观看| 久久综合九色综合网站| 欧美视频在线观看免费网址| 国产麻豆日韩| 在线视频亚洲一区| 蜜桃av一区二区三区| 一区二区三区成人| 久久人人爽爽爽人久久久| 欧美日韩国产一区二区三区| 国产一区二区三区av电影| 一本色道久久综合亚洲精品不卡| 久久成人羞羞网站| 日韩视频一区二区在线观看| 欧美中文在线字幕| 欧美视频在线观看视频极品| 亚洲第一区色| 久久久精品免费视频| 99国产精品久久久| 美日韩精品免费| 国产一区二区三区无遮挡| 一卡二卡3卡四卡高清精品视频| 久久久久在线| 亚洲在线一区二区三区| 欧美日韩视频专区在线播放| 在线欧美日韩| 久久gogo国模啪啪人体图| 亚洲精品一区二区网址| 免费观看一区| 亚洲国产精品一区在线观看不卡| 欧美一区在线直播| 亚洲一区二区三区久久| 欧美日韩国产一区精品一区| 一色屋精品视频在线看| 久久久久高清| 欧美一区日韩一区| 国产网站欧美日韩免费精品在线观看| 夜夜嗨av一区二区三区| 亚洲人成免费| 欧美理论在线| 99综合在线| 9色国产精品| 欧美无砖砖区免费| 亚洲欧美日韩在线一区| 亚洲午夜成aⅴ人片| 国产精品视频精品| 欧美影院精品一区| 久久精品国产v日韩v亚洲 | 久久久午夜精品| 欧美一区二区| 好看不卡的中文字幕| 欧美亚洲日本一区| 亚洲日本成人女熟在线观看| 日韩一级在线| 夜夜嗨av色一区二区不卡| 欧美视频一区二区三区…| 亚洲欧美精品在线| 午夜电影亚洲| 亚洲国产精品激情在线观看| 亚洲国产美女精品久久久久∴| 米奇777在线欧美播放| 亚洲精品123区| 亚洲日本无吗高清不卡| 欧美网站在线观看| 久久久久久噜噜噜久久久精品 | 欧美激情日韩| 欧美日韩国产一级| 亚洲免费视频观看| 久久成人久久爱| 日韩一区二区福利| 亚洲欧美另类中文字幕| 激情综合久久| 亚洲精品在线二区| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲国产精品日韩| 日韩视频中午一区| 国产在线播放一区二区三区| 亚洲国产精品久久精品怡红院 | 国产三区精品| 亚洲三级性片| 国产一区日韩二区欧美三区| 亚洲啪啪91| 国产一区观看| 日韩一级欧洲| 亚洲国产精品t66y| 午夜精彩国产免费不卡不顿大片| 亚洲国产精彩中文乱码av在线播放| 日韩系列在线| 亚洲欧洲精品一区二区三区不卡 | 欧美日韩精品一区二区在线播放| 久久成人这里只有精品| 欧美精品 国产精品| 久久一区二区三区四区五区| 欧美日韩国产综合视频在线观看中文| 久久久久九九九| 国产精品成人一区二区三区吃奶 | 欧美一区成人| 欧美午夜电影网| 亚洲国产精品www| 很黄很黄激情成人| 欧美亚洲一区三区| 亚洲欧美一区二区三区久久| 国产亚洲欧美另类中文| 欧美伊人久久久久久久久影院| 欧美承认网站| 久久久蜜桃精品| 国产欧美精品| 亚洲曰本av电影| 亚洲一区二区视频在线| 欧美a级片网| 亚洲大片免费看| 在线看无码的免费网站| 久久九九精品| 久久午夜色播影院免费高清| 国产日韩精品一区观看| 亚洲欧美偷拍卡通变态| 欧美一区二区在线| 国产麻豆午夜三级精品| 亚洲一级高清| 午夜精品久久99蜜桃的功能介绍| 欧美日韩黄色大片| 日韩亚洲视频在线| 亚洲在线一区| 国产日韩欧美一区在线 | 欧美理论片在线观看| 亚洲区国产区| 在线一区二区三区四区| 欧美日韩亚洲一区二| 亚洲一区二区伦理| 久久久av毛片精品| 亚洲高清在线观看一区| 欧美国产视频一区二区| 日韩午夜免费视频| 欧美在线观看视频在线| 狠狠色丁香久久婷婷综合_中| 久久欧美中文字幕| 亚洲国产精品久久91精品| 亚洲一二三四久久| 国产麻豆成人精品| 久久综合九色欧美综合狠狠| 亚洲精品1234| 香蕉av福利精品导航| 一区二区三区在线视频免费观看| 麻豆精品一区二区综合av| 亚洲精品123区| 欧美一级片在线播放| 伊人色综合久久天天| 欧美男人的天堂| 欧美一级久久久| 亚洲国产日韩欧美在线图片 | 亚洲欧美国产三级| 国产精品毛片a∨一区二区三区| 久久gogo国模裸体人体| 亚洲第一福利在线观看| 午夜精品短视频| 亚洲国产天堂久久综合网| 欧美色欧美亚洲另类七区| 久久精品日韩欧美| 日韩午夜剧场| 欧美电影免费观看网站| 亚洲欧美在线x视频| 亚洲第一黄网| 国产精品视频在线观看| 欧美高清你懂得| 欧美中文字幕第一页| 99精品视频免费全部在线| 久久免费视频一区| 亚洲欧美色婷婷| 99re热这里只有精品免费视频| 国语精品中文字幕| 国产精品稀缺呦系列在线| 在线日韩欧美视频| 免费观看国产成人| 亚洲视频在线观看| 最近中文字幕日韩精品| 国产欧美日韩在线视频| 欧美日韩大片| 欧美成人精品h版在线观看| 欧美在线亚洲在线| 亚洲欧美日韩国产中文| 一本色道婷婷久久欧美| 亚洲国产高清在线|