Ich verwende Process
über ProcessBuilder
, um eine in C-Code erstellte ausführbare Datei auszuführen. Ich fange die Process.exitValue()
, um auf diese Ausgangswerte zu reagieren. Mir ist aufgefallen, dass nicht alle Exit-Werte von der ausführbaren Datei stammen. Zum Beispiel bekomme ich einen Ausgangswert von 139 und nirgendwo in meinem C-Code gebe ich einen Ausgangswert von 139 zurück.Was bedeuten die Werte von Java Process.exitValue()?
Ich versuche, einen Überblick über die Ausgangswerte zu finden, aber ich kann das nicht finden, und jetzt habe ich gefunden Der Ausgangswert kann vom Betriebssystem abhängig sein. (Ich benutze übrigens Ubuntu).
Es scheint der einzige Ausgangswert zu sein, der 0 ist, wenn alles richtig geht. Gibt es Spezifikationen über Ausgangswerte? Kann ich sicher sein, dass ein bestimmter Bereich nur für mein eigenes Programm verwendet werden kann? Welche Exit-Codes sind für das Betriebssystem reserviert?
Ich fand heraus, dass 139 ist wahrscheinlich ein Speicherfehler im C-Code. Ich möchte das wahrscheinlich loswerden. Ich kann keine Übersicht über Exit-Wert erhalten (zB 139 = .....)
Dies ist der vereinfachte Code durch die Art und Weise ist:
ProcessBuilder p = new ProcessBuilder(executableName,
executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();
Hinweis: Das Ausführen der C ausführbare Datei in dem Ubuntu-Shell gibt überhaupt keinen Fehler (dh Ausgangswert 0). Aber in Java den gleichen Befehl zu tun gibt Exit-Wert 139.
139 ist ein _Segmentierungsfehler_. Das heißt, Ihre _c-app_ greift auf Speicher zu, auf den sie nicht zugreifen sollte. – npe
[This] (http://stackoverflow.com/a/4842719/828625) beantwortet Ihre Frage, glaube ich. –
Gefunden [dies] (http://tldp.org/LDP/abs/html/exitcodes.html) auch, aber ich weiß nicht, wie wichtig es für Sie ist. –