SIGTERM 偶尔不工作

Cit*_*ght 4 kill rhel signals jboss

我们使用常规/etc/init.d/jboss stop来停止我们机器上的 jboss。但有时,它不会停止这个过程,我们会得到下面粘贴的内容。当发生这种情况时,我们用kill -9. 这可能是应用程序代码中的错误还是可以修复的操作系统级别问题?

waiting for processes to stop/usr/local/jboss/bin/run.sh

waiting for processes to stop/usr/local/jboss/bin/run.sh

waiting for processes to stop/usr/local/jboss/bin/run.sh
/usr/local/jboss/bin/run.sh

Timeout: Shutdown command was sent, but process is still running with PID 7252
[root@mercury02 ~]#  
Run Code Online (Sandbox Code Playgroud)

PS:我打开了 /etc/init.d/jboss 文件,正如预期的那样,它kill -15在使用stop.

gol*_*cks 7

并不是 SIGTERM 不起作用,而是应用程序没有按照您希望的方式对其做出反应。一般捕获SIGTERM的目的是在退出前做一些整理,比如同步数据到磁盘等。

然而,没有强制要求进程实际退出,因此如果在响应过程中出现问题,则可能不会。

kill -9另一方面,SIGKILL ( ) 不能被捕获并且应该强制进程停止,除非由于某些非常不寻常的原因它是不可中断的(它不能自愿产生的原因)。这样做的问题在于,这意味着该进程无法在关闭之前做出反应并做任何它需要做的小事。这可能意味着它使磁盘上的数据处于不一致状态等。

因此,杀死进程的正常和首选方法是 SIGTERM。只有在失败时才应该求助于 SIGKILL,在这种情况下,您应该想知道为什么它是必要的,因为正常运行的应用程序不应该需要它。换句话说...

这可能是应用程序代码中的错误

是的。