Java 程序退出,代码为“130”

2022-09-01 08:51:52

当我在 intellJ 中关闭 Java 程序时,控制台中会出现以下日志:“进程已完成,退出代码为 130”

screenshot of java program exit code

有时,代码为“1”。

我知道这是非常基本的,但我谷歌互联网,仍然找不到退出代码的解释。

代码是什么意思?在哪里可以找到解释?


答案 1

为了从评论中窃取@Baby的答案并使其正式化,bash给出了130退出代码,Mendel Cooper的Bash-Scripting Guide指出它表明该过程已被SIGTERM终止。通常,这是用户按 Ctrl-C。


答案 2

如果你想要获取许多在正常关机后返回代码 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,而不管是否正常关闭。


推荐