首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻塞与解除阻塞

阻塞与解除阻塞
EN

Stack Overflow用户
提问于 2017-11-01 16:40:37
回答 1查看 2.9K关注 1票数 0

我正在编写一个程序,它有两个for循环,在第一个for循环期间(只打印1-5,在中间休眠1秒),SIGINT和SIGQUIT将被阻塞,而在第二个for循环中,只有SIGINT被阻塞。我成功地阻止了第一个for循环的正确信号,然后在第二个for循环上,我试图从阻塞SIGQUIT中删除SIGQUIT,但这两个信号似乎仍然被阻塞。

以下是我现在掌握的情况:

代码语言:javascript
复制
#include <unistd.h>
#include <stdio.h>
#include <wait.h>
#include <signal.h>
#include <string.h>


void hd1(int sig){
    if(sig == SIGINT){
        printf(" SIGINT Recieved\n");
    }else if(sig == SIGQUIT){
        printf(" SIGQUIT Recieved\n");
    }
}


int main(){
    sigset_t new_set;
    sigset_t old_set;

    //struct sigaction act;
    //memset(&act, 0, sizeof(act));

    //act.sa_handler = hd1;

    //sigaction(SIGINT, &act, 0);
    //sigaction(SIGQUIT, &act, 0);

    sigemptyset(&new_set);
    sigaddset(&new_set, SIGINT);
    sigaddset(&new_set, SIGQUIT);

    sigprocmask(SIG_BLOCK, &new_set, &old_set);

    for(int i = 1; i <= 5; i++){
        printf("%d\n", i);
        sleep(1);
    }


    sigdelset(&new_set, SIGQUIT);


    for(int i = 1; i <= 5; i++){
        printf("%d\n", i);
        sleep(1);
    }
}

我尝试过使用sigprocmask来解除阻塞,设置掩码来重置掩码,但是当我解除阻塞信号时,它会在循环结束后终止程序。

EN

回答 1

Stack Overflow用户

发布于 2017-11-01 16:46:04

只需第二次使用sigprocmask();。并使用SIG_SETMASK

SIG_SETMASK被阻塞的信号集设置为参数集。

代码语言:javascript
复制
sigdelset(&new_set, SIGQUIT);
sigprocmask(SIG_SETMASK, &new_set, NULL);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47059627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档