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

T9的空間

You will never walk alone!

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  69 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks

信號
提供異步時間處理方式
觸發時機:
1.終端命令
2.硬件異常,由kernel拋向對應的Process
3.kill函數/kill命令(超級用戶or Process的user相同,這里的user id一般是指實際用戶ID or 有效用戶ID,如果支持 _POSIX_SAVED_IDS,那么檢查saved-user-id)
4.軟件觸發(滿足信號條件)

這里也稍微解釋下Kill這個東西,kill函數,kill命令并不是字面上殺掉某些東西,kill只是在特定的時間發送信號,
具體的處理取決于信號本身和信號的處理方式。

信號的處理方式:
這個有點類似Java Exception的處理方式,catch住or往上throw

APUE講的信號處理方式有三種
1.忽略,SIGKILL/SIGSTOP不能忽略;一般如果Process自己不管的話,應該會走到系統默認的處理流程中,所以不能忽略這件事情是系統自己就會保證的。
2.捕捉信號,例如SIGCHLD,一般parent會call waitpid取子進程終止狀態,避免他處理Zombie狀態。
3.執行系統默認動作

我感覺1和3可以歸為一類吧,只是有些signal沒有系統默認動作,然后就跳過去了。一般的系統默認動作也就是終止進程。

SIGKILL/SIGSTOP不能被忽略的原因我覺得講的不錯,提供超級用戶終止進程的可靠方法,不然后續有可能進程的行為是未定義的.

signal函數定義:(

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

這個C函數的聲明有點難看懂

APUE講signal的語義與實現有關,所以建議大家都用sigaction

不過我看了下Android Bionic下的實現,分別包含BSD以及SYSV的版本,但也都變成了sigaction,所以一般在C庫中就保證了這一點,也就無所謂了。

 

static __sighandler_t
_signal(
int  signum, __sighandler_t  handler, int  flags)
{
    
struct sigaction  sa;
    __sighandler_t    result 
= SIG_ERR;

    sigemptyset( 
&sa.sa_mask );

    sa.sa_handler 
= handler;
    sa.sa_flags   
= flags;

    
if ( !sigaction( signum, &sa, &sa ) )
        result 
= (__sighandler_t) sa.sa_handler;

    
return result;
}



__sighandler_t bsd_signal(
int signum, __sighandler_t handler)
{
  
return _signal(signum, handler, SA_RESTART);
}


__sighandler_t sysv_signal(
int signum, __sighandler_t handler)
{
  
return _signal(signum, handler, SA_RESETHAND);
}



exec函數會講信號處理方式還原為系統默認,這個應該毫無疑問,exec后地址空間就不一樣了,保留之前的捕捉函數也是無意義的;在這之前是有意義的,我的意思是說fork后exec之前。

后面有列一大堆是否可以重入的函數,不太想記,然后講到了malloc
我想不能重入的函數無外乎兩種類型
one: 自己有maintain一些全局or static變量 --> malloc 維護分配內存時static heap linklist
two: 函數參數里面有引用之類的,會影響調用者的情況。

然后我看到這個立馬就想到了線程安全,malloc是線程安全的麼?
去看了下Bionic的實現,然后就又看到下面這個名字 Dong Lea,馬上就會想到Java Concurrent庫,看到這個你直接就會有想法,Bionic里面這個malloc肯定是線程安全的;
有時候被這些東西搞的很累,比較煩他,而且Bionic里面用的malloc的那個實現版本(aka dlmalloc)我又沒看懂:(,只好去網上search了一下,有個人做過實驗,有些結論還是可以參考的
http://www.360doc.com/content/12/0420/23/168576_205320609.shtml

總的來說,這個東西取決于C庫實現,我想Bionic和Glibc都應該一樣會支持兩種不同的版本,然后編譯的時候就可以確定是否有線程相關操作,然后在link的時候link過來不同的版本

線程安全和信號安全是兩個概念

如果在線程安全的malloc中,信號處理函數中發生重入,那么應該是會發生dead lock
如果是非線程安全中,那么應該是所謂的 undefined behavior.

前面還有一個概率忘記寫
早期的Unix系統,如果系統在執行一個低速系統調用(基本可以總結為blocking IO:包括IPC,File IO,ioctl),那么如果捕捉到信號,那么系統就會中斷這個system call -->EINTR, 這在當時是有理由的,而且理由看起來也合理,但是由于user有時候并不知道某些系統調用是否是低速系統調用,BSD引進了自動重啟的功能,linux follow這種規則

然后有幾個版本的signal函數
signal默認自動重啟
_signal(signum, handler, SA_RESTART) 這是由于在sigaction中的flag為SA_RESTART,上面sysV的實現我不想多寫了。
sigaction也就是可選的了。

但一般我印象中好多 read/write都是會自己判斷返回值以及errno 是否為 EINTR,然后retry,因為上面這種方式依賴系統實現,需要將所有的signal都設定為SA_RESTART,那么如果有某個信號發生的時候,被他INTR的系統調用才會自動重啟,不知道默認signal在注冊處理行為的時候是不是如此,感覺不太好用。

alarm函數
對于很多像alarm這種函數,在設計時or使用時均應該考慮臨界值的問題
alarm的唯一性,是by process的,process單例
所以如果alarm兩次,那么第一次會被覆蓋,怎么處理第一次未完成的情況->返回值會帶回來剩余的時間
怎么取消設定的alarm
傳入值為0 means cancel
總之了,這個東西設計的時候還蠻完善的

后面還有一堆有關signal的標準函數,這里也就不一一列舉

作業:
1.去掉for(;;), 那捕捉到SIGUSR1就返回了,pause()只要捕捉到信號,等信號處理完時自己就會返回并帶回EINTR。不曉得為啥有這種題目...
2.實現sig2str,這有點無聊了.:(不寫
3.畫runtime stack的樣子。
4.IO操作的超時最好不要采用alarm的方式,各種原子問題,select/poll是最好的選擇。
后面有好一些是要寫代碼的...
我略想,然后就不太愿意寫了.
PS:有些東西略難...我也是有點想不清楚的樣子,打算慢慢搞。

后面決定把標題改一下,順利看完書吧...Orz.

posted on 2013-06-02 21:52 Torres 閱讀(279) 評論(0)  編輯 收藏 引用 所屬分類: APUE
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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精品久久久画质超高清| 久久精品综合一区| 美女诱惑黄网站一区| 欧美激情一区二区三级高清视频 | 亚洲视频专区在线| 欧美在线免费| 欧美激情综合| 国产日韩在线一区| 亚洲国产日韩一级| 亚洲欧美视频| 久久久精品国产一区二区三区| 免费人成精品欧美精品| 久久久水蜜桃| 欧美日韩在线第一页| 国产精品久久久久7777婷婷| 国产午夜精品一区理论片飘花 | 国产在线精品二区| 亚洲精品久久在线| 欧美亚洲一区| 亚洲国产另类久久久精品极度| 一本色道88久久加勒比精品| 久久在线视频在线| 国产精品每日更新在线播放网址| 在线欧美不卡| 欧美在线日韩在线| 一本色道久久综合狠狠躁篇怎么玩| 欧美大尺度在线观看| 久久精品女人天堂| 欧美激情视频一区二区三区免费| 亚洲第一二三四五区| 在线亚洲伦理| 免费在线日韩av| 亚洲天堂成人在线视频| 欧美大片专区| 伊人天天综合| 翔田千里一区二区| 亚洲国产精品va在线看黑人 | 亚洲国产一区二区三区青草影视| 欧美一级艳片视频免费观看| 亚洲经典在线| 麻豆精品国产91久久久久久| 国产伦精品一区二区三区照片91| 日韩视频免费| 亚洲高清精品中出| 久久国产精品久久国产精品 | 久久九九精品| 国产美女诱惑一区二区| 亚洲天堂av高清| 亚洲狼人综合| 欧美日韩成人精品| 一本色道久久综合精品竹菊| 亚洲高清不卡在线观看| 欧美99在线视频观看| 亚洲电影成人| 欧美黑人多人双交| 免费观看成人www动漫视频| 韩日视频一区| 久久这里只有精品视频首页| 久久av二区| 亚洲图片你懂的| 国产精品入口尤物| 久久不射2019中文字幕| 欧美中在线观看| 国产自产精品| 免费成人你懂的| 欧美成人嫩草网站| 欧美高清视频免费观看| 亚洲国产一区在线| 亚洲精品国产精品国自产观看浪潮 | 久久久久国产一区二区三区四区| 西瓜成人精品人成网站| 激情视频亚洲| 亚洲日本欧美天堂| 国产免费成人| 亚洲第一网站| 国产欧美日韩在线 | 久久成人免费网| 欧美成人精品一区| 性伦欧美刺激片在线观看| 久久久久久色| 亚洲午夜精品| 久久久综合激的五月天| 在线视频中文亚洲| 久久国产夜色精品鲁鲁99| 亚洲精品乱码久久久久久日本蜜臀 | 欧美中文在线观看| 欧美激情综合五月色丁香| 欧美中文字幕视频| 欧美日韩国语| 免费国产自线拍一欧美视频| 欧美日韩系列| 欧美激情小视频| 国产日韩欧美成人| 亚洲精品视频在线播放| 国产色综合天天综合网| 亚洲激情一区| 狠狠综合久久| 在线一区免费观看| 久久三级福利| 免播放器亚洲一区| 欧美亚洲专区| 亚洲一区二区三区影院| 国外成人在线视频网站| 美女主播一区| 欧美成人一区二区在线| 亚洲一区二区三区中文字幕| 欧美mv日韩mv亚洲| 亚洲午夜久久久久久久久电影院| 午夜在线a亚洲v天堂网2018| 最新成人av网站| 亚洲中字黄色| 亚洲精品综合| 香蕉成人伊视频在线观看 | 欧美日本中文字幕| 野花国产精品入口| 欧美在线一区二区| 一区二区三区 在线观看视频| 午夜精品一区二区三区在线视| 国产目拍亚洲精品99久久精品| 亚洲精品裸体| 一区精品久久| 亚洲欧美资源在线| 亚洲一区二区在线免费观看视频| 久久在线免费视频| 久久久久久国产精品mv| 国产欧美日韩三级| 亚洲最新视频在线播放| 亚洲国产经典视频| 欧美在线观看视频在线| 亚洲欧美日韩在线一区| 欧美岛国在线观看| 亚洲欧美日韩一区| 国产欧美精品日韩| 日韩视频中文字幕| 亚洲精品一区二区三区在线观看| 久久久久看片| 麻豆成人av| 136国产福利精品导航网址应用| 久久精品久久综合| 久久精品中文字幕一区二区三区| 国产精品美女| 亚洲一区二区三区视频| 夜夜夜精品看看| 欧美激情一区二区久久久| 蘑菇福利视频一区播放| 精品动漫3d一区二区三区| 香蕉久久一区二区不卡无毒影院 | 欧美激情一区二区三区在线视频| 免费日韩精品中文字幕视频在线| 国内成人精品2018免费看| 久久国产精品99国产精| 久久久久久久久久看片| 激情综合网激情| 久久综合伊人77777蜜臀| 美女爽到呻吟久久久久| 久久久欧美精品sm网站| 蜜臀99久久精品久久久久久软件| 亚洲人成免费| 欧美伦理影院| 在线天堂一区av电影| 亚洲一区三区在线观看| 国产精品一区二区女厕厕| 香蕉成人伊视频在线观看| 午夜欧美不卡精品aaaaa| 国产精品网站一区| 久久久噜噜噜久噜久久| 欧美激情aaaa| 狠狠色狠狠色综合日日91app| 久久精品国产综合精品| 欧美激情一级片一区二区| 亚洲小说欧美另类社区| 国产区亚洲区欧美区| 久久综合中文色婷婷| 老牛影视一区二区三区| 亚洲欧美一区二区三区极速播放 | 香港久久久电影| 午夜亚洲性色福利视频| 亚洲激情视频在线播放| 欧美揉bbbbb揉bbbbb| 亚洲精品小视频| 久久电影一区| 亚洲精品视频免费观看| 国产精品一区在线观看| 猛干欧美女孩| 亚洲国产成人精品久久| 久久精品日韩一区二区三区| 99re6热在线精品视频播放速度| 国产精品自拍一区| 久久国产视频网站| 这里只有精品电影|