sigaction的使用

sigaction結(jié)構(gòu)體定義

struct sigaction
{
    void (*sa_handler)(int);
    void (*sa_sigaction)(int, siginfo_t*, void*);
    sigset_t sa_mask;
    int sa_flags;
};
  • sa_handler:信號(hào)處理器函數(shù)的地址票渠,亦或是常量SIG_IGN佩番、SIG_DFL之一逮刨。僅當(dāng)sa_handler是信號(hào)處理程序的地址時(shí),亦即sa_handler的取值在SIG_IGNSIG_DFL之外斥废,才會(huì)對(duì)sa_masksa_flags字段加以處理。
  • sa_sigaction:如果設(shè)置了SA_SIGINFO標(biāo)志位佳遂,則會(huì)使用sa_sigaction處理函數(shù)营袜,否則使用sa_handler處理函數(shù)。
  • sa_mask:定義一組信號(hào)丑罪,在調(diào)用由sa_handler所定義的處理器程序時(shí)將阻塞該組信號(hào)荚板,不允許它們中斷此處理器程序的執(zhí)行。
  • sa_flags:位掩碼吩屹,指定用于控制信號(hào)處理過程的各種選項(xiàng)跪另。
    • SA_NODEFER:捕獲該信號(hào)時(shí),不會(huì)在執(zhí)行處理器程序時(shí)將該信號(hào)自動(dòng)添加到進(jìn)程掩碼中煤搜。
    • SA_ONSTACK:針對(duì)此信號(hào)調(diào)用處理器函數(shù)時(shí)免绿,使用了由sigaltstack()安裝的備選棧。
    • SA_RESETHAND:當(dāng)捕獲該信號(hào)時(shí)擦盾,會(huì)在調(diào)用處理器函數(shù)之前將信號(hào)處置重置為默認(rèn)值(即SIG_IGN)嘲驾。
    • SA_SIGINFO:調(diào)用信號(hào)處理器程序時(shí)攜帶了額外參數(shù),其中提供了關(guān)于信號(hào)的深入信息

使用示例一(使用sa_handler)

void setupSignalHandlers(void)
{
    struct sigaction act;

    sigemptyset(&act.sa_mask);
    act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND;
    act.sa_handler = sigtermHandler;
    sigaction(SIGTERM, &act, NULL);

    return;
}

static void sigtermHandler(int sig)
{
    // TODO
}

使用示例二(使用sa_sigaction)

// 設(shè)置信號(hào)處理
void setupSignalHandlers(void)
{
    struct sigaction act;

    sigemptyset(&act.sa_mask);
    act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO;
    act.sa_sigaction = sigsegvHandler;
    sigaction(SIGSEGV, &act, NULL);

    return;
}

static void sigsegvHandler(int sig, siginfo_t *info, void *secret)
{
    // TODO
}

對(duì)段錯(cuò)誤等致命信號(hào)的處理

當(dāng)接收到段錯(cuò)誤等致命信號(hào)時(shí)迹卢,可以先捕獲該信號(hào)辽故,做一些處理,比如保存調(diào)用堆棧信息等腐碱,再向進(jìn)程發(fā)送該信號(hào)誊垢,確保程序能夠以正常方式結(jié)束,比如設(shè)置生成dump文件等症见。

struct sigaction act;
// TODO

sigemptyset (&act.sa_mask);
act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND;
act.sa_handler = SIG_DFL;
sigaction (sig, &act, NULL);
kill(getpid(),sig);

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喂走,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谋作,更是在濱河造成了極大的恐慌芋肠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遵蚜,死亡現(xiàn)場離奇詭異业栅,居然都是意外死亡秒咐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門碘裕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來携取,“玉大人,你說我怎么就攤上這事帮孔±鬃蹋” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵文兢,是天一觀的道長晤斩。 經(jīng)常有香客問我,道長姆坚,這世上最難降的妖魔是什么澳泵? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮兼呵,結(jié)果婚禮上兔辅,老公的妹妹穿的比我還像新娘。我一直安慰自己击喂,他們只是感情好维苔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懂昂,像睡著了一般介时。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凌彬,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天沸柔,我揣著相機(jī)與錄音,去河邊找鬼铲敛。 笑死褐澎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的原探。 我是一名探鬼主播乱凿,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼顽素,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼咽弦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胁出,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤型型,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后全蝶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闹蒜,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寺枉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绷落。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姥闪。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖砌烁,靈堂內(nèi)的尸體忽然破棺而出筐喳,到底是詐尸還是另有隱情,我是刑警寧澤函喉,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布避归,位于F島的核電站,受9級(jí)特大地震影響管呵,放射性物質(zhì)發(fā)生泄漏梳毙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一捐下、第九天 我趴在偏房一處隱蔽的房頂上張望账锹。 院中可真熱鬧,春花似錦蔑担、人聲如沸牌废。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸟缕。三九已至,卻和暖如春排抬,著一層夾襖步出監(jiān)牢的瞬間懂从,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工蹲蒲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留番甩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓届搁,卻偏偏與公主長得像缘薛,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卡睦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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

  • 一宴胧、信號(hào)及信號(hào)來源 信號(hào)本質(zhì) 信號(hào)是在軟件層次上對(duì)中斷機(jī)制的一種模擬,在原理上表锻,一個(gè)進(jìn)程收到一個(gè)信號(hào)與處理器收到一...
    丶Em1tu0F閱讀 1,428評(píng)論 0 1
  • 一恕齐、Linux系統(tǒng)概述 不加引號(hào)可理解為宏,直接替換瞬逊,單引號(hào)中特殊字符會(huì)被解釋為普通字符显歧,雙引號(hào)中$,,'還是特殊...
    赤果_b4a7閱讀 1,488評(píng)論 0 2
  • 信號(hào)處理函數(shù) sigaction的用法 int sigaction ( int signo, const stru...
    小葉大孟閱讀 2,271評(píng)論 0 0
  • 對(duì)于 Linux來說仪或,實(shí)際信號(hào)是軟中斷,許多重要的程序都需要處理信號(hào)士骤。信號(hào)范删,為 Linux 提供了一種處理異步事件...
    故事狗閱讀 84,753評(píng)論 2 62
  • 概述 Linux 在進(jìn)程間通信時(shí),有時(shí)候需要用到異步通訊方式,而信號(hào)機(jī)制是Linux系統(tǒng)本身提供的一種異步通訊. ...
    大風(fēng)qixi閱讀 1,894評(píng)論 0 4