首页 > 系统服务 > 详细

[Linux]返回被阻塞的信号集

时间:2019-04-04 12:43:54      阅读:178      评论:0      收藏:0      [点我收藏+]

一、概述

另一篇实例说到,进程可以屏蔽它不想接收的信号集。

事实上这些被屏蔽的信号只是阻塞在内核的进程表中,因为他们不能递送给进程,所以状态是未决的(pending)。

利用sigpending函数可以返回这些未决信号集。

int sigpending(sigset_t *set);

二、示例

示例中进程屏蔽了SIGUSR1信号,当给进程发送该信号后,它就会被sigpending函数返回,可以尝试先向进程发送SIGUSR2,然后再发送SIGUSR1,再而发送SIGUSR2,观察信号处理函数的变化。

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

void sig_usr(int signo)
{
    sigset_t s_2;
    if (signo == SIGUSR1)
        printf("received SIGUSR1\n");
    else if (signo == SIGUSR2)
        printf("received SIGUSR2\n");
    else
        printf("received signal %d\n", signo);
    sigpending(&s_2);
    if(sigismember(&s_2, SIGUSR1))
        printf("SIGUSR1 pending\n");
}


int main(void){
    sigset_t s_1;
    sigemptyset(&s_1);
    sigaddset(&s_1, SIGUSR1);
    sigprocmask(SIG_SETMASK, &s_1, NULL);

    signal(SIGUSR1, sig_usr);
    signal(SIGUSR2, sig_usr);

    for (;;)
    {
        pause();
    }
    return 0;
}

 

[Linux]返回被阻塞的信号集

原文:https://www.cnblogs.com/yiyide266/p/10654009.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!