我想在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));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句