系统关闭时应用程序会收到 SIGKILL,为什么没有收到 SIGTERM?

系统关闭时应用程序会收到 SIGKILL,为什么没有收到 SIGTERM?

我们在 X 下使用 Java 应用程序,该应用程序从/etc/X11/Xsessions.d/9999ngoma

root@denis-laptop:~# uname -a
Linux denis-laptop 2.6.32-36-generic #79-Ubuntu SMP Tue Nov 8 22:29:26 UTC 2011 i686 GNU/Linux

它最初是作为 GDM 的全屏替代品。当系统断电时,我们的应用程序似乎收到了 SIGKILL 而不是 SIGTERM (这就是某些资源未存储到磁盘的原因)。

怎么会发生这种事?

我还应该再次警告,该应用程序专门从/etc/X11/Xsessions.d/9999ngoma.独占意味着 Gnome 仅在我们的应用程序退出后才加载(我只是不知道在 X 下独占运行应用程序的其他方法)。是否可能是 GDM 收到 SIGTERM,然后收到 SIGKILL 子项,该子项在 GDM 会话初始化过程期间未完成(Xsession.d 目录中的脚本)。

答案1

应用程序、其父进程或其任何父进程可能已将 SIGTERM 信号设置为忽略。此设置在对 fork() 的调用中继承,并在 exec() 中保持不变。

您可以通过在各个进程上使用 strace(1) 并手动向它们发送 SIGTERM 来进一步诊断此问题。如果 strace 输出显示正在接收信号,则他们不会忽略它。

相关内容