用的多KILL -9,发现其实KILL -15才稳当,看了如下的BLOG文:
http://kenwublog.com/kill-java-correctly#more-944
才发现,原来这样的:
SIGNKILL(9) 和 SIGNTERM(15) 的区别在于:
SIGNKILL(9) 的效果是立即杀死进程. 该信号不能被阻塞, 处理和忽略。
SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。
下面的程序:
public class ShutdownHookTest {
private static final void shutdownCallback() {
System.out.println("Shutdown callback is invoked.");
}
public static void main(String[] args) throws InterruptedException {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
shutdownCallback();
}
});
Thread.sleep(10000);
}
}
在上面这段程序中,我使用Runtime为当前java进程添加了一个ShutdownHook,它的作用是在java正常退出时,执行shutdownCallback()这个回调方法。
此时,如果你试验过在java进程未自动退出前,执行 kill -9 pid,即发送 SIGNKILL 信号,会发现这个回调接口是不会被执行的。这是SIGNKILL信号起的作用。
对于我这个简单的测试用例来说,不被执行也无大碍。但是,如果你的真实系统中有需要在java进程退出后,释放某些资源。
而这个释放动作,因为SIGNKILL被忽略了,那就可能造成一些问题。
所以,推荐大家使用标准的kill进程方式,即 kill -15 pid。
相关文章
- 还是用kill -15好
- 整理了15个Python库,好用到哭!
- c++的类中,声明一个对象好还是用指针申请一块空间好?
- ABBYY FineReader 15 PDF有哪些好用的功能?
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
- 登录页面怎么设计更好?登录页面设计的15个心理学策略
- 15 个有用的 MySQL/MariaDB 性能调整和优化技巧(转载的一篇好文)
- 【精心挑选】15款最好的 jQuery 网格布局插件(Grid Plugins)
- HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?
- 字节流与字符流的区别&&用字节流好还是用字符流好?