Java Jar退出代码与Unix表示之间不匹配

时间:2015-02-26 12:29:45

标签: java unix

我正在尝试使用System.exit()将错误代码返回给OS(Unix) 但每次它在Unix中都被错误地表示出来。

当我们执行“$?”时,将System.exit(1)表示为256在unix中。 System.exit(2)代表我们做“$?”在unix中。 当我们做“$?”时,System.exit(3)被表示为768在unix。

任何人都可以指导原因。

1 个答案:

答案 0 :(得分:1)

以下是一个小例子,您可以在系统上运行测试,以验证您是否仍然获得相同的结果。

<强> Foo.java

package sub;
public class Foo {
    public static void main(String[] args) {
        System.out.printf("System.exit(%s)%n", args[0]);
        System.exit(Integer.valueOf(args[0]));
    }
}


MANIFEST.MF

Manifest-Version: 1.0
Main-Class: sub.Foo


foo.sh

#!/bin/bash
javac -d . Foo.java

jar cmf MANIFEST.MF foo.jar sub/Foo.class

for val in 1 2 3
do
  java -cp foo.jar sub.Foo $val
  echo "rc: sub.Foo $?"
  java -jar foo.jar $val
  echo "rc: main class in manifest $?"
  echo
done

结果

System.exit(1)
rc: sub.Foo 1
System.exit(1)
rc: main class in manifest 1

System.exit(2)
rc: sub.Foo 2
System.exit(2)
rc: main class in manifest 2

System.exit(3)
rc: sub.Foo 3
System.exit(3)
rc: main class in manifest 3