2011-12-07 65 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取決於外部命令。請檢查外部命令的手冊頁。