Używam Process
przez do uruchamiania pliku wykonywalnego wykonanego w kodzie C. Łapię Process.exitValue()
, aby zareagować na te wartości wyjścia. Zauważyłem, że nie wszystkie wartości wyjściowe pochodzą z pliku wykonywalnego. Na przykład, otrzymuję wartość końcową 139 i nigdzie w moim kodzie C zwracam wartość końcową 139.Jakie jest znaczenie wartości z Java Process.exitValue()?
Próbuję znaleźć przegląd wartości wyjściowych, ale nie mogę tego znaleźć, a teraz znalazłem out wartość wyjścia może być zależna od systemu operacyjnego. (Używam Ubuntu nawiasem mówiąc).
Wygląda na to, że jedyną wartością wyjściową, o której mowa, jest 0, gdy wszystko idzie w prawo. Czy istnieją specyfikacje dotyczące wartości wyjściowych? Czy mogę mieć pewność, że pewien zakres może być użyty tylko dla mojego własnego programu? Jakie kody wyjścia są zarezerwowane dla systemu operacyjnego.
Okazało się, że 139 jest prawdopodobnie błędem pamięci w kodzie C. Chcę się tego pozbyć. Nie mogę uzyskać żadnych przegląd wartości wyjściowych (np 139 = .....)
To jest uproszczony kod przy okazji:
ProcessBuilder p = new ProcessBuilder(executableName,
executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();
Uwaga: Uruchomienie pliku wykonywalnego C w powłoce Ubuntu nie daje żadnego błędu (tj. wartość wyjścia 0). Ale robi to samo polecenie w Javie daje wartość Exit 139.
139 jest błędem _Segmentation_. Oznacza to, że twój _c-app_ ma dostęp do pamięci, do której nie powinien mieć dostępu. – npe
[This] (http://stackoverflow.com/a/4842719/828625) odpowiada na twoje pytanie, które wierzę. –
Znalezione [to] (http://tldp.org/LDP/abs/html/exitcodes.html) również, ale nie wiem, jak ważne jest to dla ciebie. –