我试图在我的ubuntu服务器上运行一个关闭钩子,但是我似乎遇到了多个线程的问题.使用基本的ShutdownHook,当我使用kill进程时,下面的代码可以正常工作kill <PID>,这意味着关闭行为被激活.
public static void main(String[] args) {
ShutdownHook shutDown = new ShutdownHook();
shutDown.attachShutDownHook();
while(true){}
}
Run Code Online (Sandbox Code Playgroud)
但是这个带有附加线程的相同代码却没有
public static void main(String[] args) {
ShutdownHook shutDown = new ShutdownHook();
shutDown.attachShutDownHook();
(new Thread() {
public void run() {
while ( true ) {}
}
}).start();
while(true){}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
class ShutdownHook {
ShutdownHook() {
}
public void attachShutDownHook() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("Shut down hook activating");
}
});
System.out.println("Shut Down Hook Attached.");
}
}
Run Code Online (Sandbox Code Playgroud) 我试图让我的Java程序在我的unix服务器上正常退出.我有一个jar文件,我早上通过cron工作开始.然后在晚上,当我想关闭它时,我有一个cron作业,它调用一个找到PID和调用的脚本kill -9 <PID>.但是,当我以这种方式终止时,似乎没有激活我的关闭挂钩.我也试过kill <PID>(没有-9)我也遇到了同样的问题.如何确保调用关闭挂钩?或者,也许每天都有更好的方法来杀死我的进程.
class ShutdownHook {
ShutdownHook() {}
public void attachShutDownHook() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("Shut down hook activating");
}
});
System.out.println("Shut Down Hook Attached.");
}
}
Run Code Online (Sandbox Code Playgroud) 我已将我的 JAVA 代码编译成一个 jar 文件,该文件已移植到我的 ubuntu 服务器。我可以使用通常的方式手动启动它,java -jar myJar.jar但我希望我的程序仅活动 8 小时。如何将我的 jar 文件设置为一个从上午 9 点开始并在下午 5 点自动关闭的进程?