從Java進程調用shell腳本時遇到一些奇怪的行爲。從java調用腳本,接收到sigpipe信號
Process p = Runtime.getRuntime().exec("mybashscript.sh");
(new StreamGobblerThread(p.getInputStream())).start();
(new StreamGobblerThread(p.getErrorStream())).start();
p.waitFor();
returnValue = p.exitValue();
的StreamGobblerThread只是有,做了
while(((inputStream.available>0) { inputStream.skip(available); }
大約有20%的這部作品時的run()方法,但大多腳本失敗,141返回碼的時候了。
從我在google上發現的,141是收到SIGPIPE時的返回碼。
任何想法?
也許你應該打印出的錯誤,他們可能會給你一個有意義的錯誤信息 – 2010-11-17 20:39:04
'SIGPIPE'可能是由'while'提前退出引起的'StreamGobblerThread'。要檢查它,只需使用空的'run()'。在循環中添加一些調試打印以查看「可用」是什麼。嘗試讀取數據而不是跳過。 – khachik 2010-11-17 20:45:48
除了腳本的返回代碼之外,似乎沒有'錯誤',因爲它不是發生的java異常。所有java似乎知道的是腳本的退出代碼 – Will 2010-11-17 20:49:00