信號

Ctrl-C中斷當(dāng)前運行的程序截酷。這個中斷由一個稱為信號的內(nèi)核機制產(chǎn)生培漏。

什么是信號,它從哪里來

  1. 用戶
    用戶能夠通過Ctrl-C溪厘、Ctrl-Z或是終端驅(qū)動程序分配給信號控制字符的其他按鍵來請求內(nèi)核產(chǎn)生信號。
  2. 內(nèi)核
    當(dāng)進程執(zhí)行出錯時牌柄,內(nèi)核給進程發(fā)送一個信號畸悬,如非法讀取內(nèi)存,浮點數(shù)溢出珊佣。
  3. 進程
    一個進程可以通過系統(tǒng)調(diào)用kill給另一個進程發(fā)送信號蹋宦。即,進程間可以通過信號機制進行通信咒锻。
    由于進程的某個操作所產(chǎn)生的信號叫同步信號冷冗,如除數(shù)為0;由于用戶鍵盤輸入的進程外信號叫異步信號惑艇。
    信號代碼定義在/usr/include/signal.h中蒿辙。

進程如何處理信號

當(dāng)進程收到SIGINT時,并不一定銷毀滨巴。進程通過系統(tǒng)調(diào)用signal告訴內(nèi)核自己想怎樣處理這個信號思灌。具體有三種選擇

  1. 默認處理(通常是消亡)
    每個信號都有自己的默認處理方式。SIGINT的默認處理方式是消亡恭取。進程可以通過下列調(diào)用恢復(fù)默認處理
    signal(SIGINT, SIG_DEL);
    
  2. 忽略信號
    signal(SIGINT, SIG_IGN);
    
  3. 調(diào)用函數(shù)
    signal(SIGINT, func);
    
    告訴內(nèi)核收到信號時泰偿,調(diào)用自定義的函數(shù)func進行處理。這適用于發(fā)生中斷時進行必要的清理工作蜈垮。

簡單的例子

#include <signal.h>
#include <stdio.h>

int main()
{
    void f(int); // 信號處理函數(shù)
    int i;
    signal(SIGINT, f); //注冊處理函數(shù)
    for(i=0; i<5; ++i)
    {
        printf("hello signal!\n");
        sleep(1);
    }

    return 1;
}

void f(int signum)
{
    printf("dolly\n");
}

程序由兩部分組成:main函數(shù)和信號處理函數(shù)f耗跛。程序首先照常執(zhí)行main函數(shù)的循環(huán),如果進程收到SIGINT信號攒发,內(nèi)核函數(shù)會調(diào)用注冊的f函數(shù)调塌,然后返回到跳轉(zhuǎn)前的位置。

考慮一個問題:屏蔽所有信號并在程序中執(zhí)行死循環(huán)惠猿,程序會一直執(zhí)行下去羔砾,無法干涉嗎?
實際上Unix不允許這種情況發(fā)生,因為并不是所有的信號都允許被忽略:SIGKILLSIGSTOP蜒茄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市餐屎,隨后出現(xiàn)的幾起案子檀葛,更是在濱河造成了極大的恐慌,老刑警劉巖腹缩,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿聋,死亡現(xiàn)場離奇詭異,居然都是意外死亡藏鹊,警方通過查閱死者的電腦和手機润讥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盘寡,“玉大人楚殿,你說我怎么就攤上這事「吞担” “怎么了脆粥?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長影涉。 經(jīng)常有香客問我变隔,道長,這世上最難降的妖魔是什么蟹倾? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任匣缘,我火速辦了婚禮,結(jié)果婚禮上鲜棠,老公的妹妹穿的比我還像新娘肌厨。我一直安慰自己,他們只是感情好岔留,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布夏哭。 她就那樣靜靜地躺著,像睡著了一般献联。 火紅的嫁衣襯著肌膚如雪竖配。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天里逆,我揣著相機與錄音进胯,去河邊找鬼。 笑死原押,一個胖子當(dāng)著我的面吹牛胁镐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盯漂,長吁一口氣:“原來是場噩夢啊……” “哼颇玷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起就缆,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤帖渠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后竭宰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體空郊,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年切揭,在試婚紗的時候發(fā)現(xiàn)自己被綠了狞甚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡廓旬,死狀恐怖哼审,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗤谚,我是刑警寧澤棺蛛,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站巩步,受9級特大地震影響旁赊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椅野,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一终畅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竟闪,春花似錦离福、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至理朋,卻和暖如春絮识,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗽上。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工次舌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兽愤。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓彼念,卻偏偏與公主長得像挪圾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逐沙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 信號的基本概念 信號被認為是一種軟件中斷(區(qū)別于硬件中斷),信號機制提供了一種在單進程/線程下處理異步事件的方法哲思。...
    小葉大孟閱讀 1,912評論 0 1
  • README ABOUT SIGNAL 信號是什么? 信號是一種很古老的IPC(進程間通信)方式吩案。在早期的類Uni...
    蕭然AND沐橦閱讀 2,784評論 2 2
  • 對于 Linux來說也殖,實際信號是軟中斷,許多重要的程序都需要處理信號务热。信號,為 Linux 提供了一種處理異步事件...
    故事狗閱讀 84,918評論 2 62
  • 我曾經(jīng)問我媽己儒,你覺得什么是幸福崎岂,她說自由是幸福,自由是每個人都向往的事,但是每個人都必須壓抑自己闪湾,不能隨心所欲冲甘。從...
    荷小胖閱讀 239評論 2 2
  • 婚姻帶給一個人的究竟是什么?什么才是婚姻最重要的途样?為什么自從有了孩子之后江醇,就越來越迷惑?不清楚何暇,絞盡腦汁地想...
    靈丫兒閱讀 177評論 0 0