9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦 > 學習電腦 > 操作系統 > Linux教程 > Linux信號機制詳細介紹

Linux信號機制詳細介紹

時間: 孫勝652 分享

Linux信號機制詳細介紹

  什么是Linux信號機制,Linux信號機制要講解起來沒那么簡單,本文只是給大家講解下Linux信號機制的基礎知識,讓你對Linux信號機制有一些了解,一起來學習下吧。

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

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

  給我一個信號

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

  常見信號

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

  代碼如下:

  $man 7 signal

  來查閱更多的信號。

  上面幾個信號中,

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

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

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

  SIGCONT 用于通知暫停的進程繼續。

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

  在shell中使用信號

  下面我們實際應用一下信號。我們在shell中運行ping:

  代碼如下:

  $ping localhost

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

  代碼如下:

  [1]+ Stopped ping localhost

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

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

  代碼如下:

  $kill -SIGCONT 27397

  來傳遞SIGCONT信號給ping進程。

  信號處理 (signal disposition)

  在上面的例子中,所有的信號都采取了對應信號的默認操作。但這并不絕對。當進程決定執行信號的時候,有下面幾種可能:

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

  2) 默認(default)操作。每個信號對應有一定的默認操作。比如上面SIGCONT用于繼續進程。

  3) 自定義操作。也叫做獲取 (catch) 信號。執行進程中預設的對應于該信號的操作。

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

  信號常常被用于系統管理,所以它的內容相當龐雜。深入了解信號,需要一定的Linux環境編程知識。

  總結

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

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

  $kill

  上面就是Linux信號機制的相關介紹了,Linux信號機制遠比想象中的復雜,短短幾個篇幅是很難講全的,如果你對Linux信號機制感興趣,可找相關書籍了解。

熱門文章

309385 主站蜘蛛池模板: 韩国免费A级毛片久久| 少妇上班人妻精品偷人| 亚洲av成人一区二区三区| 一区二区视频| 国产精品天天看天天狠| 亚洲老熟女一区二区三区| 亚洲AV无码专区亚洲AV紧身裤 | 一本色道久久加勒比综合| 亚洲成在人线AV品善网好看 | 午夜毛片不卡免费观看视频| 日本无码欧美一区精品久久| 俺来也俺去啦最新在线| 国产亚洲无线码一区二区| 亚洲国产色婷婷久久99精品91| 国产精品理论片| 人妻蜜臀久久av不卡| 人妻饥渴偷公乱中文字幕| 国产一区二区亚洲一区二区三区| 色婷婷久久综合中文久久一本 | 国产精品久久久久婷婷五月| 资源新版在线天堂偷自拍| 国产日韩精品视频无码| 日韩国产亚洲欧美成人图片| 久久亚洲国产精品久久| 国产日女人视频在线观看| 日韩在线视频线观看一区| 亚洲精品无码成人A片九色播放| 18国产午夜福利一二区| 久久亚洲精品日本波多野结衣| 久久精品国产清自在天天线| 国产精品不卡一区二区久久| 美女一区二区三区在线观看视频 | 亚洲男女羞羞无遮挡久久丫| 国产裸体永久免费无遮挡| 亚洲中文字幕一区二区| 午夜欧美日韩在线视频播放| 久久96热在精品国产高清| 色一伊人区二区亚洲最大| 免费观看的av在线播放| 日日碰狠狠添天天爽超碰97| 娇妻玩4p被三个男人伺候 |