2011-12-07 66 views
-2

我使用Runtime.getRuntime().exec()方法来运行一个命令,我得到的退出码11,当我打电话Process.waitFor()
当我在控制台上运行相同的命令时,它按预期运行。getRuntime()。EXEC()返回退出码11

命令是: 蜂房-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)where day ='20111017'group by SITE_ID;

我在Unix机器上运行。

任何想法为什么?什么是退出代码11?

+1

这取决于你开始的程序。如果你在命令行上运行它,在完成之后键入'echo $?'__right(中间没有其他命令)。 – Mat

+0

我运行它,结果是0 – zohar

+0

我得到'command not found:a command'。严重的是,你需要告诉我们你正在运行哪个命令。退出代码取决于您(尝试)调用的程序! –

回答

0

为了修正它,我改变了命令为:

蜂房-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文件名。

1

退出代码由您调用的程序设置。没有唯一的定义,但0通常没有错误,而其他任何内容都表示错误。错误代码从程序到程序完全不同,有些程序不费心设置错误代码。

System.exit(n); 

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

1

Process.waitFor()阻塞线程,直到从派生的子进程退出代码被接收。在你的情况下,这个退出码11取决于外部命令。请检查外部命令的手册页。