c - 卡在 sigwait 上

标签 c macos signals

我在我的代码中做错了,其他进程向它发送了一个 SIGUSR2 信号:

sigset_t sigset;
sigemptyset(&sigset);
sigaddset(&sigset, SIGILL);
sigaddset(&sigset, SIGUSR2);
sigwait(&sigset, &received);

XCode 通知收到 SIGUSER2(31) 信号,但收到 = SIGILL(4)(或集合中的最小信号)。

为什么会这样?我哪里错了?

现在,它看起来像这样:

    sigset_t sigset;
    sigemptyset(&sigset);
    sigaddset(&sigset, SIGILL);
    sigaddset(&sigset, SIGUSR2);
    sigprocmask(SIG_BLOCK, &sigset, 0);
    sigwait(&sigset, &received);
    if(received == SIGUSR2) {
        //...
    } else if(received == SIGILL) {
        //...
    }

还是不行。

最佳答案

有时调试器会妨碍。我以前见过调试器干扰信号处理。尝试在不涉及调试器的情况下运行代码。

以下代码在 OS X 上完美运行:

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

int main()
{
    sigset_t set;
    int sig;

    sigemptyset(&set);
    sigaddset(&set, SIGUSR1);
    sigaddset(&set, SIGUSR2);
    sigprocmask(SIG_BLOCK, &set, NULL);
    sigwait(&set, &sig);
    printf("Got signal %d\n", sig);
    return 0;
}

关于c - 卡在 sigwait 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5955822/

相关文章:

c - C 编程中的 p 符号是什么?

macos - 在 MAC OSX 和 Ubuntu 上的 F# 中,我在 4.0 中运行 FSI 时出错

swift - 如何以管理员权限运行命令

Java 应用程序在 Ubuntu 12.04 上不接收信号

django - Django post_save 信号是异步的吗?

c - 如何随机化 64 位模式中的最低位

c - 以 sprintf 科学记数法打印所有有效数字

c - 使用串口时收到额外的空字节

macos - 如何在没有 IB 中的 shift 修饰符的情况下轻松设置使用需要转换的字符的菜单项键等效项?

c - OpenMPI 中的信号处理错误