我们使用常规/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 ~]#
PS:我打开了 /etc/init.d/jboss 文件,正如预期的那样,它kill -15
在使用stop
.
答案1
这并不完全是 SIGTERM 不起作用,而是应用程序没有按照您希望的方式对其做出反应。一般来说,捕获SIGTERM的目的是在退出前做一些整理工作,比如将数据同步到磁盘等。
然而,没有强制要求该进程实际退出,因此如果在响应过程中出现问题,它可能不会退出。
kill -9
另一方面,SIGKILL ( ) 不能被捕获,并且应该强制进程停止,除非由于某些非常不寻常的原因不间断的(它不能自愿产生的原因)。问题在于,这意味着该进程无法做出反应并在关闭之前执行任何需要执行的小操作。这可能意味着它使磁盘上的数据处于不一致的状态等。
因此,终止进程的正常且首选的方法是 SIGTERM。只有当失败时,您才应该求助于 SIGKILL,在这种情况下,您应该想知道为什么它是必要的,因为正常运行的应用程序不需要它。换句话说...
这可能是应用程序代码中的错误
是的。