c - 获取有关信号处理的信息

标签 c unix signals

我必须编写一个函数来检索有关某些信号处理状态的一些信息。也就是说,如果有一个特定的处理程序或信号被忽略,哪些信号被阻止以及哪些标志被激活。为此,我使用了 sigaction 函数。这是我的代码:

void show_signal_info(int signal_number){
    struct sigaction s;
    int nomask=1;

    if(sigaction(signal_number, NULL, &s) == -1){
        perror("Error getting information of signal");
    }else{
        printf("Signal name: %s\n",signal_name(signal_number));

        printf("Signal mask: ");
        for(i=0; i<32; i++){
            if(sigismember(s.sa_mask,i) == 1)
                printf("%s ",signal_name(i);
        printf("%s",nomask ? "None\n" : "\n");

        if(s.sa_handler == SIG_DFL)
             printf("Default\n");
        else if (s.sa_handler == SIG_IGN)
             printf("Ignored\n");
        else
             printf("Handler\n");

        [...]

    }
}

问题是我不知道如何使用 s.sa_flags 检查哪些标志打开?有一些类似于我可以与 wait() 函数一起使用的宏,还是有其他方法可以做到这一点?

最佳答案

The problem is that I dont know how to check what flags are on with s.sa_flags

您可以测试位,例如:

if (s.sa_flags & SA_RESTART)
    ....

关于c - 获取有关信号处理的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502210/

相关文章:

erlang - 如何在 Erlang 中处理 SIGINT?

c - 反转字符串 c 中的单词

c - `qsort()` 真的是 QuickSort 吗?

c++ - 在 C++ 中使用线程报告计算进度

c - 在 C 中使用信号、处理程序、kill 和 getpid

c - 设计shell时如何处理Control-C信号?

c++ - GCC 调试标志 SCons

c - switch 语句 case '1' 已经在使用 - HandmadeHero 138

linux - 如何在linux shell脚本中使用变量遍历路径

linux - 通过算术运算在 hp unix 中循环日期