发送终止信号时,Java进程不会终止

时间:2019-07-09 09:03:34

标签: java jvm

有时候,我们将面临尝试杀死Java进程的尝试,但是该进程并未终止,我们必须发送kill -9来终止它。

问题:

  1. 当Java进程收到kill -15信号时,会发生什么情况
  2. 该过程不终止的可能原因是什么?如何诊断?

2 个答案:

答案 0 :(得分:2)

当Java进程或更准确地说是HotSpot JVM接收到信号15(SIGTERM)时,它将启动关闭序列。其基本步骤之一是调用Shutdown hooks

Shutdown挂钩是常规Java线程。按照惯例,它们应该快速完成工作,但是有时(就像普通的Java代码一样),关闭挂钩可能会循环,阻塞,等待某事或以其他方式延迟终止。 JVM将挂起,直到所有关闭挂钩完成。

使用jstack实用工具查找阻止及时终止的原因。在线程转储中寻找SIGTERM handler线程-它可能正在等待其他(违规)线程完成。违规线程正在运行时,JVM将无法正常退出。

答案 1 :(得分:0)

  1. kill -15:发送 SIGTERM ,终止该过程,但首先允许其进行一些清理。和平终止。

  2. 正在等待输入/输出,等等。