【问题标题】:JVM on OS X always exiting with status 0 (as captured in Bash script)?OS X 上的 JVM 总是以状态 0 退出(在 Bash 脚本中捕获)?
【发布时间】:2016-05-18 20:40:41
【问题描述】:

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

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

,打包到TestOSX.jar 文件中。

虽然在 Windows 上我可以运行上面的 sn-p 并显示 %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。

我在这里遗漏了哪些琐碎的细节?

【问题讨论】:

  • echo $updater_evit_val ...?
  • 否则将wait 注释掉,看看这是否改变了事情。此外,shell 退出的最大 int 为 255。您的 1111 将是 mod 255(我很确定)。祝你好运。
  • @MadProgrammer - 好吧,这不是微不足道的,但感谢你抓住它!在 Mac 上的原始脚本中(我从另一个系统发布的)我没有错字。我将保持原来的帖子不变,以便其他人阅读。一旦我可以访问 Mac,我会尽快回复其他人的建议/答案。谢谢你。
  • @shellter:评论等待就可以了。似乎我没有得到在 shell 中运行另一个命令与不同程序之间的区别。关于 mod 255 的观察也很准确。谢谢!
  • @shellter:FWIW,它似乎实际上是模 256。我猜也是 255...

标签: java macos bash exit


【解决方案1】:

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

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

【讨论】:

  • 评论等待解决了这个问题。我很欣赏清晰的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 2017-03-08
  • 2016-04-16
  • 2011-07-15
相关资源
最近更新 更多