登记信号集

来源:互联网 发布:扬尘检测仪规定数据 编辑:程序博客网 时间:2024/04/28 21:35

sigaction.c

#include <sys/types.h>

#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void my_func(int signum)
{
    printf("if you want to quit,please try SIGOUIT\n");
}


int main()
{
    sigset_t set, pendset;
    struct sigaction action1,action2;
    if (sigemptyset(&set)<0)
        perror("sigemptyse");
    if (sigaddset(&set, SIGQUIT)<0)
        perror("sigaddset");
    if (sigaddset(&set, SIGINT)<0)
        perror("sigaddset");
    if (sigprocmask(SIG_BLOCK, &set, NULL)<0)
        perror("sigprocmask");
    else
    {   
        printf("blocked\n");
        sleep(5);
    }   


    if (sigprocmask(SIG_UNBLOCK, &set, NULL)<0)
        perror("sigprocmask");
    else
        printf("unblock");
    while(1)
    {   
        if (sigismember(&set, SIGINT))
        {   
            sigemptyset(&action1.sa_mask);
            action1.sa_handler  = my_func;
            sigaction(SIGINT, &action1, NULL);
        }   
        else if (sigismember(&set, SIGQUIT))
        {   
            sigemptyset(&action2.sa_mask);
            action2.sa_handler  = SIG_DFL;
            sigaction(SIGTERM, &action2, NULL);
        }   
    }   
    return 0;
}


gcc sigaction.c -o sigaction -g

./sigaction