Sto usando Process
tramite ProcessBuilder
per eseguire un eseguibile fatto in codice C. Sto prendendo il Process.exitValue()
per reagire a questi valori di uscita. Ho notato che non tutti i valori di uscita provengono dall'eseguibile. Ad esempio, ottengo un valore di uscita di 139 e da nessuna parte nel mio codice C restituisco un valore di uscita di 139.Qual è il significato dei valori da Java Process.exitValue()?
Sto cercando di trovare una panoramica dei valori di uscita, ma non riesco a trovarlo, e ora ho trovato il valore di uscita può essere dipendente dal sistema operativo. (Sto usando Ubuntu tra l'altro).
Sembra che l'unico valore di uscita di cui essere sicuro sia 0 quando tutto va bene. Ci sono delle specifiche sui valori di uscita? Posso essere sicuro che un determinato intervallo possa essere utilizzato solo per il mio programma? Quali codici di uscita sono riservati per il sistema operativo.
Ho scoperto che 139 è probabilmente un errore di memoria nel codice C. Voglio sbarazzarmi del probabilmente. Non può ottenere qualsiasi panoramica dei valori di uscita (ad esempio, 139 = .....)
Questo è il codice semplificato per la via:
ProcessBuilder p = new ProcessBuilder(executableName,
executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();
Nota: L'esecuzione del file eseguibile C nella shell di Ubuntu non dà alcun errore (es. valore di uscita 0). Ma, facendo lo stesso comando in Java dà valore di uscita 139.
139 è un errore _Segmentation_. Significa che la tua _c-app_ sta accedendo alla memoria a cui non dovrebbe accedere. – npe
[Questo] (http://stackoverflow.com/a/4842719/828625) risponde alla tua domanda credo. –
Trovato [this] (http://tldp.org/LDP/abs/html/exitcodes.html), ma non so quanto sia significativo per te. –