訊號學習筆記3–訊號的阻塞處理

來源:互聯網
上載者:User

本節主要介紹使用sigprocmask函數來人工設定訊號阻塞。首先介紹函數原型:

/* Get and/or change the set of blocked signals.  */extern int sigprocmask (int __how, __const sigset_t *__restrict __set,            sigset_t *__restrict __oset) __THROW;

1)函數參數說明:

__how: 輸入參數,設定訊號阻塞掩碼的方式。可以包括3中掩碼設定,分別是阻塞訊號的SIG_BLOCK,接觸阻塞的SIG_UNBLOCK, 設定阻塞掩碼的SIG_SETMASK。

__set: 輸入參數,阻塞訊號集。當參數__how為SIG_BLOCK時,該參數標明要阻塞的訊號集。當__how參數為SIG_UNBLOCK時,該參數解除阻塞的訊號集。當__how參數為SIG_SETMASK時,該參數標明要阻塞的訊號集。

__oset: 輸出參數,原阻塞訊號集。調用成功後,將返回該進程原阻塞訊號集。

2)傳回值說明:

0: 調用成功;

-1: 調用失敗,可以通過errno擷取詳細資料。

樣本:

#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <signal.h>voidhandle_sigint(int signo){    printf("receive signal %d\n", signo);}intmain(void){    sigset_t mask;    sigset_t omask;    signal(SIGINT, handle_sigint);    sigemptyset(&mask);    sigaddset(&mask, SIGINT);    sigprocmask(SIG_BLOCK, &mask, &omask);    sleep(10);    sigprocmask(SIG_SETMASK, &omask, NULL);    exit(0);}

運行結果:

[root@localhost linuxc]# ./mysigprocmask             <-按下<CTRL>+<C>        進程無返回,說明訊號被阻塞。receive signal 2     10秒休眠結束後,進程收到訊號 (訊號被重新發送)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.