Estoy usando Process
a través de ProcessBuilder
para ejecutar un ejecutable hecho en código C. Estoy capturando el Process.exitValue()
para reaccionar en estos valores de salida. Noté que no todos los valores de salida son del ejecutable. Por ejemplo, obtengo un valor de salida de 139 y en ninguna parte de mi código C estoy devolviendo un valor de salida de 139.¿Cuál es el significado de los valores de Java Process.exitValue()?
Estoy tratando de encontrar una visión general de los valores de salida, pero no puedo encontrar esto, y ahora encontré el valor de salida puede depender del sistema operativo. (Estoy usando Ubuntu por cierto).
Parece que el único valor de salida para asegurarse es 0 cuando todo va bien. ¿Existen especificaciones sobre los valores de salida? ¿Puedo estar seguro de que cierto rango se puede usar solo para mi propio programa? Qué códigos de salida están reservados para el sistema operativo.
Descubrí que 139 es probablemente un error de memoria en el código C. Quiero deshacerme de lo probable. No puedo conseguir ninguna visión general de los valores de salida (por ejemplo, 139 = .....)
Este es el código simplificado por cierto:
ProcessBuilder p = new ProcessBuilder(executableName,
executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();
Nota: La ejecución del ejecutable C en la cáscara de Ubuntu no da ningún error en absoluto (es decir, sale del valor 0). Pero, haciendo el mismo comando en Java da valor de salida 139.
139 es un _Segmentation fault_. Significa que su _c-app_ está accediendo a la memoria a la que no debería acceder. – npe
[Este] (http://stackoverflow.com/a/4842719/828625) responde a su pregunta, creo. –
Encontrado [este] (http://tldp.org/LDP/abs/html/exitcodes.html) también, pero no sé lo significativo que es para usted. –