【问题标题】:getRuntime().exec() return exit code 11getRuntime().exec() 返回退出代码 11
【发布时间】:2011-12-07 14:11:37
【问题描述】:

我正在使用 Runtime.getRuntime().exec() 方法运行命令,当我调用 Process.waitFor() 时,我得到退出代码 11。
当我在控制台上运行相同的命令时,它会按预期运行。

命令是: hive -hiveconf mapred.map.child.java.opts=-Xmx2048M -hiveconf mapred.job.shuffle.input.buffer.percent=0.30 -hiveconf io.sort.factor=25 -hiveconf io.sort.mb=256 -hiveconf mapred.job.reuse.jvm.num.tasks=500 -hiveconf mapred.job.priority=VERY_LOW -e select site_id,count(session_id) from my_table where day = '20111017' group by site_id;

我在 Unix 机器上运行。

知道为什么吗?退出代码 11 是什么?

【问题讨论】:

  • 这取决于您正在启动的程序。如果你在命令行上运行它,输入echo $?它完成之后(中间没有其他命令)。
  • 我收到command not found: a command。说真的,您需要告诉我们您正在运行 哪个 命令。退出代码取决于您(尝试)调用的程序!

标签: java runtime.exec


【解决方案1】:

退出代码由您调用的程序设置。没有唯一的定义,除了0 通常没有错误,其他任何东西都表示错误。错误代码因程序而异,有些程序不费心设置错误代码。

System.exit(n);

是将退出代码设置为n(整数值)的Java 方式。那么,“你”什么时候使用System.exit(11);?那你就有答案了……

【讨论】:

    【解决方案2】:

    Process.waitFor() 阻塞线程,直到收到来自分叉子进程的退出代码。在您的情况下,此退出代码 11 取决于外部命令。请检查外部命令的手册页。

    【讨论】:

      【解决方案3】:

      为了修复它,我将命令更改为:

      hive -hiveconf mapred.map.child.java.opts=-Xmx2048M -hiveconf mapred.job.shuffle.input.buffer.percent=0.30 -hiveconf io.sort.factor=25 -hiveconf io.sort.mb= 256 -hiveconf mapred.job.reuse.jvm.num.tasks=500 -hiveconf mapred.job.priority=VERY_LOW -f 文件名;

      如您所见,我将 -e 查询更改为 -f 文件名。

      【讨论】:

        猜你喜欢
        • 2013-04-17
        • 2011-02-16
        • 2014-07-08
        • 1970-01-01
        • 1970-01-01
        • 2016-12-08
        • 2020-03-09
        • 2021-08-29
        • 2017-07-13
        相关资源
        最近更新 更多