sigprocmask函数使用精要

#include "apue.h"测试

static void     sig_quit(int);ui

int
main(void)
{
        sigset_t        newmask, oldmask, pendmask;进程

        if (signal(SIGQUIT, sig_quit) == SIG_ERR)
                err_sys("can't catch SIGQUIT");
        sigemptyset(&newmask);
        sigaddset(&newmask, SIGQUIT);
        sigaddset(&newmask, SIGINT);
        if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
                err_sys("SIG_BLOCK error");rem

        sleep(5);       /* SIGQUIT here will remain pending */it

        if (sigpending(&pendmask) < 0)
                err_sys("sigpending error");
        if (sigismember(&pendmask, SIGQUIT))file

             printf("\nSIGQUIT pending\n");
             if (sigismember(&pendmask, SIGINT))
                printf("\nSIGINT pending\n");    程序

        /*
         * Reset signal mask which unblocks SIGQUIT.
         */
        if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
                err_sys("SIG_SETMASK error");
        printf("SIGQUIT unblocked\n");error

        sleep(5);       /* SIGQUIT here will terminate with core file */
        exit(0);
}ember

static void
sig_quit(int signo)
{
        printf("caught SIGQUIT\n");
        if (signal(SIGQUIT, SIG_DFL) == SIG_ERR)
                err_sys("can't reset SIGQUIT");
}static

以上程序出自apue,实在是为了测试一下sigprocmask的做用,由运行的结果能够看出,sigprocmask只是将信号阻塞,并未消除,也就是说,信号集一旦恢复以后,该处理的进程仍是要处理的,在第一个sleep以前按下中断键,进程不会处理,可是一旦恢复以后,进程就退出了。

相关文章
相关标签/搜索