<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Fork me on GitHub

      Linux信號基礎(chǔ)

      作者:Vamei 出處:http://www.rzrgm.cn/vamei 歡迎轉(zhuǎn)載,也請保留這段聲明。謝謝!

       

      Linux進程基礎(chǔ)一文中已經(jīng)提到,Linux以進程為單位來執(zhí)行程序。我們可以將計算機看作一個大樓,內(nèi)核(kernel)是大樓的管理員,進程是大樓的房客。每個進程擁有一個獨立的房間(屬于進程的內(nèi)存空間),而每個房間都是不允許該進程之外的人進入。這樣,每個進程都只專注于自己干的事情,而不考慮其他進程,同時也不讓別的進程看到自己的房間內(nèi)部。這對于每個進程來說是一種保護機制。(想像一下幾百個進程總是要干涉對方,那會有多么混亂,或者幾百個進程相互偷窺……)

       

      然而,在一些情況,我們需要打破封閉的房間,以便和進程交流信息。比如說,內(nèi)核發(fā)現(xiàn)有一個進程在砸墻(硬件錯誤),需要讓進程意識到這樣繼續(xù)下去會毀了整個大樓。再比如說,我們想讓多個進程之間合作。這樣,我們就需要一定的通信方式。信號(signal)就是一種向進程傳遞信息的方式。我們可以將信號想象成大樓的管理員往房間的信箱里塞小紙條。隨后進程取出小紙條,會根據(jù)紙條上的內(nèi)容來采取一定的行動,比如燈壞了,提醒進程使用手電。(當(dāng)然,也可以完全無視這張紙條,然而在失火這樣緊急的狀況下,無視信號不是個好的選擇)。相對于其他的進程間通信方式(interprocess communication, 比如說pipe, shared memory)來說,信號所能傳遞的信息比較粗糙,只是一個整數(shù)。但正是由于傳遞的信息量少,信號也便于管理和使用。信號因此被經(jīng)常地用于系統(tǒng)管理相關(guān)的任務(wù),比如通知進程終結(jié)、中止或者恢復(fù)等等。

       

      給我一個信號

       

      信號是由內(nèi)核(kernel)管理的。信號的產(chǎn)生方式多種多樣,它可以是內(nèi)核自身產(chǎn)生的,比如出現(xiàn)硬件錯誤(比如出現(xiàn)分母為0的除法運算,或者出現(xiàn)segmentation fault),內(nèi)核需要通知某一進程;也可以是其它進程產(chǎn)生的,發(fā)送給內(nèi)核,再由內(nèi)核傳遞給目標(biāo)進程。內(nèi)核中針對每一個進程都有一個表存儲相關(guān)信息(房間的信箱)。當(dāng)內(nèi)核需要將信號傳遞給某個進程時,就在該進程相對應(yīng)的表中的適當(dāng)位置寫入信號(塞入紙條),這樣,就生成(generate)了信號。當(dāng)該進程執(zhí)行系統(tǒng)調(diào)用時,在系統(tǒng)調(diào)用完成后退出內(nèi)核時,都會順便查看信箱里的信息。如果有信號,進程會執(zhí)行對應(yīng)該信號的操作(signal action, 也叫做信號處理signal disposition),此時叫做執(zhí)行(deliver)信號。從信號的生成到信號的傳遞的時間,信號處于等待(pending)狀態(tài)(紙條還沒有被查看)。我們同樣可以設(shè)計程序,讓其生成的進程阻塞(block)某些信號,也就是讓這些信號始終處于等待的狀態(tài),直到進程取消阻塞(unblock)或者無視信號。

       

      常見信號

      信號所傳遞的每一個整數(shù)都被賦予了特殊的意義,并有一個信號名對應(yīng)該整數(shù)。常見的信號有SIGINT, SIGQUIT, SIGCONT, SIGTSTP, SIGALRM等。這些都是信號的名字。你可以通過

      $man 7 signal

      來查閱更多的信號。

       

      上面幾個信號中,

      SIGINT   當(dāng)鍵盤按下CTRL+C從shell中發(fā)出信號,信號被傳遞給shell中前臺運行的進程,對應(yīng)該信號的默認(rèn)操作是中斷 (INTERRUPT) 該進程。

      SIGQUIT  當(dāng)鍵盤按下CTRL+\從shell中發(fā)出信號,信號被傳遞給shell中前臺運行的進程,對應(yīng)該信號的默認(rèn)操作是退出 (QUIT) 該進程。

      SIGTSTP  當(dāng)鍵盤按下CTRL+Z從shell中發(fā)出信號,信號被傳遞給shell中前臺運行的進程,對應(yīng)該信號的默認(rèn)操作是暫停 (STOP) 該進程。

      SIGCONT  用于通知暫停的進程繼續(xù)

      SIGALRM  起到定時器的作用,通常是程序在一定的時間之后才生成該信號。

       

      在shell中使用信號

      下面我們實際應(yīng)用一下信號。我們在shell中運行ping:

      $ping localhost

      此時我們可以通過CTRL+Z來將SIGTSTP傳遞給該進程。shell中顯示:

      [1]+  Stopped                 ping localhost

      我們使用$ps來查詢ping進程的PID (PID是ping進程的房間號), 在我的機器中為27397

      我們可以在shell中通過$kill命令來向某個進程發(fā)出信號:

      $kill -SIGCONT  27397

      來傳遞SIGCONT信號給ping進程。

       

      信號處理 (signal disposition)

      在上面的例子中,所有的信號都采取了對應(yīng)信號的默認(rèn)操作。但這并不絕對。當(dāng)進程決定執(zhí)行信號的時候,有下面幾種可能:

      1) 無視(ignore)信號,信號被清除,進程本身不采取任何特殊的操作

      2) 默認(rèn)(default)操作。每個信號對應(yīng)有一定的默認(rèn)操作。比如上面SIGCONT用于繼續(xù)進程。

      3) 自定義操作。也叫做獲取 (catch) 信號。執(zhí)行進程中預(yù)設(shè)的對應(yīng)于該信號的操作。

      進程會采取哪種操作,要根據(jù)該進程的程序設(shè)計。特別是獲取信號的情況,程序往往會設(shè)置一些比較長而復(fù)雜的操作(通常將這些操作放到一個函數(shù)中)。

       

      信號常常被用于系統(tǒng)管理,所以它的內(nèi)容相當(dāng)龐雜。深入了解信號,需要一定的Linux環(huán)境編程知識。

       

      總結(jié)

      信號機制; generate, deliver, pending, blocking

      signal action/dispositon; ignore, default action, catch signal

      $kill

       

      歡迎閱讀“騎著企鵝采樹莓”系列文章

      posted @ 2012-10-04 23:48  Vamei  閱讀(29895)  評論(11)    收藏  舉報
      主站蜘蛛池模板: 国产成人黄色自拍小视频| 久久精品国产一区二区蜜芽| 亚洲免费成人av一区| 黄色亚洲一区二区在线观看| 亚洲中文字幕精品第三区| 久久精品成人免费看| 国产 麻豆 日韩 欧美 久久| 99久久亚洲综合精品网| 國产AV天堂| 国产一二三五区不在卡| 国产精品免费中文字幕| 亚洲色精品VR一区二区三区| 天堂中文8资源在线8| 无码人妻丰满熟妇啪啪欧美| 扒开粉嫩的小缝隙喷白浆视频| 久久青青草原亚洲AV无码麻豆| 麻豆一区二区三区精品视频| av亚洲在线一区二区| 99国产精品99久久久久久| 国产亚洲精品成人av久| 亚洲精品三区四区成人少| 精品久久久久久无码国产| 国产精品成人午夜福利| 丰满高跟丝袜老熟女久久| 国产日韩综合av在线| 成年女人免费v片| 洪洞县| 清水县| 久久人与动人物a级毛片| 国产AV福利第一精品| 国产精品人妻一区二区高 | 日韩一欧美内射在线观看| 国产农村乱人伦精品视频| 国产农村妇女高潮大叫| 国产精品天干天干综合网| 亚洲精品电影院| 人妻少妇精品无码专区二区| 中文字幕av中文字无码亚| 十四以下岁毛片带血a级| 国产老熟女无套内射不卡| 亚洲av成人网人人蜜臀|