我在我的代码中做错了,其他进程向它发送了一个 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/