Java 程序退出,代码为“130”
2022-09-01 08:51:52
当我在 intellJ 中关闭 Java 程序时,控制台中会出现以下日志:“进程已完成,退出代码为 130”
有时,代码为“1”。
我知道这是非常基本的,但我谷歌互联网,仍然找不到退出代码的解释。
代码是什么意思?在哪里可以找到解释?
当我在 intellJ 中关闭 Java 程序时,控制台中会出现以下日志:“进程已完成,退出代码为 130”
有时,代码为“1”。
我知道这是非常基本的,但我谷歌互联网,仍然找不到退出代码的解释。
代码是什么意思?在哪里可以找到解释?
为了从评论中窃取@Baby的答案并使其正式化,bash给出了130退出代码,Mendel Cooper的Bash-Scripting Guide指出它表明该过程已被SIGTERM终止。通常,这是用户按 Ctrl-C。
如果你想要获取许多在正常关机后返回代码 0 的本机应用的行为,则此答案适用。
您可以注册一个执行正常关闭的挂钩,例如释放应用保留的资源。如果正常关机成功,此挂接还可以将退出代码覆盖为 0。钩子将在 SIGTERM 上调用(当用户按 Ctrl+C 时发生)。
Runtime.getRuntime()
.addShutdownHook(
new Thread(
() -> {
//graceful shutdown steps
Runtime.getRuntime().halt(0); //override the exit code to 0
}));
上面的解决方案将防止可能存在的其他钩子在此之后运行。它还将阻止删除已调用的文件。.deleteOnExit()
另一种方法可能是实现和注册如下所示的:SecurityManager
static class Converting130To0SecurityManager extends SecurityManager {
@Override
public void checkExit(int status) {
if (status == 130) {
System.exit(0);
} else {
super.checkExit(status);
}
}
@Override
public void checkPermission(Permission perm) {
// Allow all activities by default
}
}
...
System.setSecurityManager(new Converting130To0SecurityManager());
这样的安全管理器将始终将 130 代码转换为 0,而不管是否正常关闭。