我有一个问题。我正在为这样的信号定义自己的处理程序。
sig_11.sa_handler = &signal1_SIGILL;
sig_11.sa_flags=SA_NODEFER;
if (sigaction(SIGUSR2, &sig_12, NULL ) < 0) {
perror ("sigaction");
return 1;
}
我正在为不同的信号创建这样的处理程序。但这并不重要。
在我发送USR2信号之前,一切看起来都很好。似乎这使得进程忽略所有其他信号。它不会终止进程而只是忽略所有其他信号
这是正常的行为吗?
答案 0 :(得分:0)
你没有初始化sa_mask
,你没有告诉我们sig_11
变量是如何创建的,也不是在处理程序中做了什么,但我怀疑这个值是坏的在sa_mask
中设置,因此至少在处理程序运行期间可能会阻止某些信号。通常在处理程序结束时,事情会恢复正常。
至少SIGKILL
可以使用,因为它无法阻止或捕获。