考虑以下简单的代码,永远打印"Hi world":
public class WakeMeUpSomehow {
public static void main(String[] args) {
while (true) {
try {
System.out.println( " Hi world ");
Thread.sleep(1000); //1000 milliseconds is one second.
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:

有没有办法设计一个外部的第三个程序,它监视这个程序,以便在我们杀死它时注意到(如命令行中的CTRL + C); 然后这个"父"程序恢复"Hello World"运行?
我认为它可能看起来像这样:

所以我的问题是 - 如何模拟这样的代码,具有这种故障安全功能?有办法做到这一点吗?
谢谢 !
编辑:我在这里找到了一个相关的简洁链接,但解决了一些不同的东西 - 如何重新启动Java应用程序?
保证关闭挂钩在程序的正常关闭事件上运行,但不会在各种异常终止时运行,例如强制终止 JVM时.
一种解决方案可能是使用批处理脚本:
@echo off
setlocal
start /wait java WakeMeUpSomehow
if errorlevel 1 goto retry
echo Finished successfully
exit
:retry
echo retrying...
start /wait java WakeMeUpSomehow
Run Code Online (Sandbox Code Playgroud)