У меня возникает какое-то странное поведение при вызове сценария оболочки из процесса Java.Вызов сценария из 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 просто имеет метод Run(), который делает
while(((inputStream.available>0) { inputStream.skip(available); }
О 20% времени это работает, но в основном скрипт завершается с кодом возврата 141 сразу.
Из того, что я нашел в google, 141 - код возврата при получении SIGPIPE.
Любые идеи?
, возможно, вы должны распечатать ошибки, они могут дать вам смысл сообщение об ошибке –
'SIGPIPE' может быть вызвано ранним выходом из' while' в 'StreamGobblerThread'. Чтобы проверить это, просто используйте пустой 'run()'.Добавьте некоторую отладочную печать в цикле, чтобы узнать, что такое '' доступный''. Попытайтесь читать данные вместо пропусков. – khachik
Кажется, что не существует «ошибки», кроме кода возврата из сценария, потому что это не исключение Java. все java, похоже, знают, что код выхода скрипта – Will