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

T9的空間

You will never walk alone!

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  69 隨筆 :: 0 文章 :: 28 評(píng)論 :: 0 Trackbacks

信號(hào)
提供異步時(shí)間處理方式
觸發(fā)時(shí)機(jī):
1.終端命令
2.硬件異常,由kernel拋向?qū)?yīng)的Process
3.kill函數(shù)/kill命令(超級(jí)用戶(hù)or Process的user相同,這里的user id一般是指實(shí)際用戶(hù)ID or 有效用戶(hù)ID,如果支持 _POSIX_SAVED_IDS,那么檢查saved-user-id)
4.軟件觸發(fā)(滿(mǎn)足信號(hào)條件)

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

信號(hào)的處理方式:
這個(gè)有點(diǎn)類(lèi)似Java Exception的處理方式,catch住or往上throw

APUE講的信號(hào)處理方式有三種
1.忽略,SIGKILL/SIGSTOP不能忽略;一般如果Process自己不管的話(huà),應(yīng)該會(huì)走到系統(tǒng)默認(rèn)的處理流程中,所以不能忽略這件事情是系統(tǒng)自己就會(huì)保證的。
2.捕捉信號(hào),例如SIGCHLD,一般parent會(huì)call waitpid取子進(jìn)程終止?fàn)顟B(tài),避免他處理Zombie狀態(tài)。
3.執(zhí)行系統(tǒng)默認(rèn)動(dòng)作

我感覺(jué)1和3可以歸為一類(lèi)吧,只是有些signal沒(méi)有系統(tǒng)默認(rèn)動(dòng)作,然后就跳過(guò)去了。一般的系統(tǒng)默認(rèn)動(dòng)作也就是終止進(jìn)程。

SIGKILL/SIGSTOP不能被忽略的原因我覺(jué)得講的不錯(cuò),提供超級(jí)用戶(hù)終止進(jìn)程的可靠方法,不然后續(xù)有可能進(jìn)程的行為是未定義的.

signal函數(shù)定義:(

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

這個(gè)C函數(shù)的聲明有點(diǎn)難看懂

APUE講signal的語(yǔ)義與實(shí)現(xiàn)有關(guān),所以建議大家都用sigaction

不過(guò)我看了下Android Bionic下的實(shí)現(xiàn),分別包含BSD以及SYSV的版本,但也都變成了sigaction,所以一般在C庫(kù)中就保證了這一點(diǎn),也就無(wú)所謂了。

 

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函數(shù)會(huì)講信號(hào)處理方式還原為系統(tǒng)默認(rèn),這個(gè)應(yīng)該毫無(wú)疑問(wèn),exec后地址空間就不一樣了,保留之前的捕捉函數(shù)也是無(wú)意義的;在這之前是有意義的,我的意思是說(shuō)fork后exec之前。

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

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

總的來(lái)說(shuō),這個(gè)東西取決于C庫(kù)實(shí)現(xiàn),我想Bionic和Glibc都應(yīng)該一樣會(huì)支持兩種不同的版本,然后編譯的時(shí)候就可以確定是否有線程相關(guān)操作,然后在link的時(shí)候link過(guò)來(lái)不同的版本

線程安全和信號(hào)安全是兩個(gè)概念

如果在線程安全的malloc中,信號(hào)處理函數(shù)中發(fā)生重入,那么應(yīng)該是會(huì)發(fā)生dead lock
如果是非線程安全中,那么應(yīng)該是所謂的 undefined behavior.

前面還有一個(gè)概率忘記寫(xiě)
早期的Unix系統(tǒng),如果系統(tǒng)在執(zhí)行一個(gè)低速系統(tǒng)調(diào)用(基本可以總結(jié)為blocking IO:包括IPC,F(xiàn)ile IO,ioctl),那么如果捕捉到信號(hào),那么系統(tǒng)就會(huì)中斷這個(gè)system call -->EINTR, 這在當(dāng)時(shí)是有理由的,而且理由看起來(lái)也合理,但是由于user有時(shí)候并不知道某些系統(tǒng)調(diào)用是否是低速系統(tǒng)調(diào)用,BSD引進(jìn)了自動(dòng)重啟的功能,linux follow這種規(guī)則

然后有幾個(gè)版本的signal函數(shù)
signal默認(rèn)自動(dòng)重啟
_signal(signum, handler, SA_RESTART) 這是由于在sigaction中的flag為SA_RESTART,上面sysV的實(shí)現(xiàn)我不想多寫(xiě)了。
sigaction也就是可選的了。

但一般我印象中好多 read/write都是會(huì)自己判斷返回值以及errno 是否為 EINTR,然后retry,因?yàn)樯厦孢@種方式依賴(lài)系統(tǒng)實(shí)現(xiàn),需要將所有的signal都設(shè)定為SA_RESTART,那么如果有某個(gè)信號(hào)發(fā)生的時(shí)候,被他INTR的系統(tǒng)調(diào)用才會(huì)自動(dòng)重啟,不知道默認(rèn)signal在注冊(cè)處理行為的時(shí)候是不是如此,感覺(jué)不太好用。

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

后面還有一堆有關(guān)signal的標(biāo)準(zhǔn)函數(shù),這里也就不一一列舉

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

后面決定把標(biāo)題改一下,順利看完書(shū)吧...Orz.

posted on 2013-06-02 21:52 Torres 閱讀(277) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 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>
            亚洲国产高清高潮精品美女| 中日韩美女免费视频网址在线观看| 亚洲欧美日韩久久精品| 亚洲精品日韩综合观看成人91| 亚洲国产高清在线| 91久久精品国产91性色| 日韩午夜激情| 亚洲女女做受ⅹxx高潮| 久久av一区二区三区漫画| 久久综合九色九九| 欧美精品在线免费播放| 国产精品影音先锋| 伊人久久av导航| 亚洲五月六月| 久久婷婷一区| 日韩视频在线观看免费| 性欧美videos另类喷潮| 欧美电影在线播放| 国产欧美一区二区在线观看| 在线免费精品视频| 午夜精品在线视频| 亚洲国产精品激情在线观看| 亚洲女性裸体视频| 欧美人体xx| 国内精品久久久久久久影视麻豆 | 久久se精品一区精品二区| 久久精品视频在线| 亚洲精品在线观| 欧美在线你懂的| 欧美色欧美亚洲另类二区| 黄色成人小视频| 国产一区二区观看| 艳女tv在线观看国产一区| 久久蜜臀精品av| 亚洲香蕉网站| 欧美破处大片在线视频| 悠悠资源网亚洲青| 欧美在线视频全部完| 9i看片成人免费高清| 欧美电影美腿模特1979在线看| 国产一区二区三区精品久久久 | 亚洲精品欧美| 久久久久久久久久久久久9999| 99re视频这里只有精品| 牛牛精品成人免费视频| 禁断一区二区三区在线| 久久国产成人| 午夜精品区一区二区三| 欧美视频一区二| 日韩亚洲综合在线| 91久久精品一区二区别| 欧美成人免费观看| 亚洲精品国产精品乱码不99按摩 | 国产欧美日韩在线观看| 亚洲一区二区三区四区视频| 亚洲精品久久久久中文字幕欢迎你| 久久综合亚州| 最新国产の精品合集bt伙计| 欧美99久久| 欧美电影专区| 日韩香蕉视频| 亚洲精品在线一区二区| 欧美日韩国产在线播放网站| 日韩视频在线一区二区三区| 亚洲人成啪啪网站| 欧美日韩免费高清一区色橹橹| 在线视频日韩精品| 亚洲网址在线| 国产亚洲欧洲| 欧美黄色aaaa| 欧美另类99xxxxx| 一本一本久久a久久精品牛牛影视| 91久久久久久国产精品| 欧美三级网址| 香蕉久久一区二区不卡无毒影院| 亚洲欧美中文日韩v在线观看| 国产亚洲一区在线| 欧美大片一区| 国产精品xxxav免费视频| 欧美伊人久久大香线蕉综合69| 久久国产精品久久精品国产| 亚洲国语精品自产拍在线观看| 亚洲国产影院| 国产欧美在线看| 免费在线欧美视频| 欧美无乱码久久久免费午夜一区| 久久久91精品国产一区二区三区| 欧美成人午夜激情视频| 亚洲精品字幕| 亚洲免费视频一区二区| 在线观看日产精品| 日韩午夜在线观看视频| 国产亚洲成年网址在线观看| 亚洲电影下载| 国产精品一区二区男女羞羞无遮挡 | 亚洲剧情一区二区| 国产欧美一区在线| 最近看过的日韩成人| 国产精品视频99| 亚洲国产成人久久综合一区| 国产精品久久久久久久电影 | 亚洲欧美日韩在线不卡| 久久久久一区二区三区| 亚洲午夜一级| 免费在线观看一区二区| 欧美专区日韩专区| 欧美日韩国产首页| 欧美 日韩 国产一区二区在线视频| 欧美三区美女| 欧美激情片在线观看| 国产午夜精品福利| 在线一区二区三区四区| 91久久久亚洲精品| 久久精品视频免费| 午夜一区不卡| 欧美午夜不卡影院在线观看完整版免费 | 亚洲欧美综合精品久久成人| 一区二区毛片| 欧美国产综合视频| 免费观看一级特黄欧美大片| 国产女主播在线一区二区| 一本色道久久加勒比88综合| 亚洲精选一区| 欧美成人午夜剧场免费观看| 欧美大片在线观看一区| 精品成人一区二区三区| 欧美一区二区三区四区在线观看地址 | 欧美午夜精品久久久久久人妖| 欧美成熟视频| 亚洲国产成人av好男人在线观看| 欧美伊人久久| 久久久久国产一区二区三区四区 | 一区二区三区视频免费在线观看 | 日韩午夜精品视频| 99视频精品| 欧美日韩国产精品自在自线| 亚洲国产精品一区二区三区 | 久久久久久久久久码影片| 国产精品色在线| 亚洲欧美制服另类日韩| 欧美亚洲午夜视频在线观看| 国产精品尤物| 欧美在线精品一区| 免费亚洲电影在线观看| 曰本成人黄色| 免费国产一区二区| 亚洲精品久久久久久一区二区 | 亚洲免费视频观看| 国产精品久久久久久久免费软件| 9i看片成人免费高清| 亚洲欧美一区二区视频| 国产嫩草一区二区三区在线观看| 亚洲欧美激情视频| 久久久综合激的五月天| 亚洲第一偷拍| 欧美日韩日本视频| 亚洲欧洲99久久| 欧美不卡在线| 亚洲宅男天堂在线观看无病毒| 国产精品一区二区三区成人| 久久久精品一区| 亚洲免费不卡| 久久精品首页| 亚洲三级视频| 国产精品综合久久久| 久久尤物电影视频在线观看| 亚洲九九精品| 久久午夜羞羞影院免费观看| 日韩亚洲欧美一区二区三区| 国产美女扒开尿口久久久| 免费观看成人| 亚洲在线免费| 亚洲人成网站在线观看播放| 久久精品麻豆| 一区二区三区蜜桃网| 狠狠综合久久| 国产精品高潮呻吟久久av黑人| 久久久久国产精品www| 一区二区精品国产| 欧美激情1区2区| 久久久精品一区| 亚洲视频一区二区| 亚洲激情成人在线| 国内精品美女av在线播放| 欧美午夜剧场| 欧美成人免费网| 欧美综合第一页| 亚洲性图久久| 夜夜精品视频一区二区| 欧美国产精品久久| 老牛嫩草一区二区三区日本| 午夜伦理片一区| 亚洲免费在线看| 一区二区三区产品免费精品久久75| 在线观看不卡av| 红桃视频成人| 激情欧美一区二区三区在线观看| 国产精品爽爽ⅴa在线观看| 欧美视频亚洲视频| 欧美午夜精品伦理|