java - OS X 上的 JVM 总是以状态 0 退出(如 Bash 脚本中捕获的那样)?

标签 java macos bash exit

我有一个非常简单的 Java 类,除了:

public class TestMain {
  public static void main(String[] args) {
    System.out.println("Running!");
    System.exit(1111);
  }
}

,打包到 TestOSX.jar 文件中。

虽然在 Windows 上我可以运行上面的代码片段并显示 %ERRORLEVEL% 具有预期值,但在 OS X 上我得到了不同的结果。

给定 test.sh 包含:

#!/bin/bash

"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" -jar TestOSX.jar 
wait $!
updater_exit_val=$?
echo $updater_evit_val

,我总是打印 0。

设置:OS X 10.11.1、Oracle Java 8 u60。

我在这里错过了什么琐碎的细节?

最佳答案

您不使用&将您的java进程发送到后台。因此wait是在java进程退出后执行的。它找不到您尝试等待的进程,因为它已经退出并因此给出返回代码 0。 $? 返回最后一个命令的返回代码(在您的情况下wait)。

您可以从脚本中删除等待,或者通过在末尾添加 & 将 java 进程发送到后台。

关于java - OS X 上的 JVM 总是以状态 0 退出(如 Bash 脚本中捕获的那样)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35282281/

相关文章:

java - 我无法弄清楚为什么我的程序的一部分在继续执行下一个语句之前循环了 4 次

java - android 给字符串数组赋值

java 如何在同名目录中创建.txt

macos - 在Mac上录制终端的脚本

macos - 如何消除 Mac OS X Lion 上本地主机/虚拟主机解析/加载缓慢(2-3 秒延迟)的问题?

linux - 通过 SCP 将文件从 WWW 文件夹复制到外部服务器

用于交互式 bash 的 C 接口(interface)

java - 查看有多少直接缓冲内存可用于 Java?

macos - 自动关闭单引号和双引号 vscode

linux - Bash:从 chroot 和切换用户中执行命令