我想在 Linux 上处理信号 SIGTSTP (18)。这是我的代码:
void handler(int signum){
printf("Signal %d has tried to stop me.", signum);
}
int main(void){
struct sigaction act;
sigset_t mask;
act.sa_handler = handler;
act.sa_flags = 0;
sigemptyset(&mask);
sigaddset(&mask, SIGTSTP);
sigprocmask(SIG_SETMASK, &mask, NULL);
sigaction(SIGTSTP, &act, NULL);
pause();
}
当我以这种方式从另一个终端发送信号时:
$ kill -18 PID
handler() 函数没有运行。 我已经尝试在对 sigaction() 的调用中将 SIGTSTP 替换为 18。它不起作用。
有什么想法吗? 感谢您的宝贵时间。
最佳答案
您故意阻止将 SIGTSTP
传递给您的进程
sigaddset(&mask, SIGTSTP);
sigprocmask(SIG_SETMASK, &mask, NULL);
sigprocmask
和 SIG_SETMASK
设置掩码以阻止 信号。删除对 sigprocmask
的调用,信号应该被传送。
另一件事是在填充之前将 act
归零:
memset(&act, 0, sizeof(act));
关于linux - 为什么我的信号处理程序不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247501/