簡體   English   中英

無法在信號處理程序中設置信號掩碼

[英]Can't set a signal mask in signal handler

我有一個小問題:如果我在主程序中執行處理程序功能內的代碼(而不是調用kill),則掩碼會探查並阻止SIGINT。 如果我嘗試在SIGUSR2調用上添加信號掩碼,如下面的代碼所示,則該掩碼不會掩蓋任何SIGINT信號。 這里有什么問題?

  pid_t parent_pid;
  sigset_t mask;

    int main(void) {
        signal(SIGINT, handleSigint);
        signal(SIGUSR2, handleSigUSR2);
        signal(SIGUSR1, handleSigUSR1);
        sleep(1);
        kill(getpid(), SIGUSR2);
        while (1) {
        }

    }

void handleSigUSR2(int sig) {
    signal(SIGUSR2, handleSigUSR2);
    printf("StartUSR2\n");
    if (sigaddset(&mask, SIGINT) != 0) {
        printf("Error with addset\n");
    }
    if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0) {
        printf("Error with sigprocmask\n");
    }
    printf("EndUSR2\n");

}

當信號處理程序返回時,對sigprocmask執行的更改將被撤消。 我相信沒有明確定義在信號處理程序中設置sigprocmask。 有關Linux的信息,請參見rt_sigreturn(2)的手冊頁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM