我有一个应用程序:“app-ctrl” Process-id:1000
我想通过发送信号 SIGSEGV 来终止这个进程。(要求用于模拟目的)
[santosh@localhost ~]$ kill -11 1000
app-ctrl 第一次被杀死。现在,当它使用以下命令再次启动时:
[santosh@localhost ~]$ start app-ctrl
它得到新的进程 id 2000。
现在,如果我想用命令“kill -11 2000”杀死它。这没用。
所有其他信号的工作方式类似于 "kill -6 2000" 或 "kill -9 2000" 。通过调试,我发现 SIGSEGV 被阻止了。所以我在我们的主代码库中添加了以下 3 条语句:
sigemptyset (&x);
sigaddset(&x, SIGSEGV);
sigprocmask(SIG_UNBLOCK, &x, NULL);
添加以上 3 行后,“kill -11”一直使用新的二进制文件。每次启动“app-ctrl”时,都会执行以上 3 条语句。
为什么 SIGSEGV 默认被阻止。有什么办法可以阻止 SIGSEGV 被阻止?