从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