我们经常使用启动/关闭脚本来关闭应用程序,例如tomcat 容器的启动脚本有 startup.sh 和shutdown.sh ,通过这两个脚本,可以关闭启动Tomcat 。
但是还有一种方式,根据应用名找到 进程id ,杀死进程,到达进程id关闭的的效果。
linux 系统可以采用 kill 加信号编号的方式来关闭进程。 例如 kill -9 PID
可以使用 kill -l 命令,查看所有的信号编号。
简单来说:
kill -9 PID 是操作系统从内核级别强制杀死一个进程.
kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭.
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(100000);
}
}