getRuntime()。exec()返回退出代码11

时间:2011-12-07 14:11:37

标签: java runtime.exec

我使用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从my_table中选择site_id,count(session_id),其中day ='20111017'group by site_id;

我在Unix机器上运行。

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

3 个答案:

答案 0 :(得分:1)

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

System.exit(n);

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

要解决此问题,我将命令更改为:

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 filename;

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