【发布时间】:2018-02-06 02:54:03
【问题描述】:
当你通过 PID 强制终止进程时:
kill -9 1123
是否有任何方法在进程终止时调用,直到关闭?
【问题讨论】:
标签: java linux unix process pid
当你通过 PID 强制终止进程时:
kill -9 1123
是否有任何方法在进程终止时调用,直到关闭?
【问题讨论】:
标签: java linux unix process pid
对于java,你可以给你的进程添加一个ShutdownHook,当sigterm被发送到这个进程时,ShutdownHook中的代码会在jvm自动关闭之前被执行。
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
//your cleanup codes
}
});
【讨论】:
查看链接以检查两个信号之间的差异以及如何捕获它们等。
简而言之,sigterm 允许进程在结束前清理他的东西(他的最后遗嘱),但sigkill 不会也不会被您的应用程序捕获! (想象一下程序永远运行且不可阻挡,这将是一团糟)
补充阅读:
Why I am not getting signal SIGKILL on kill -9 command in bash?
https://major.io/2010/03/18/sigterm-vs-sigkill/
http://www.learnlinux.org.za/courses/build/shell-scripting/ch12s03.html
【讨论】: