java process exit-code

Valores de salida de Java Processbuilder



exit-code (1)

Estoy usando Process via processbuilder para ejecutar un ejecutable hecho en c-code. Estoy capturando el valor de salida para reaccionar a este código de salida. Noté que no todos los códigos de salida son del ejecutable. Por ejemplo, ahora obtengo un valor de salida 139. Y en ninguna parte de mi c-code estoy devolviendo un valor de salida de 139. Estoy intentando encontrar una descripción general de los códigos de salida, pero no puedo encontrarlo, y ahora descubrí que el código de salida puede depender del sistema operativo. (Estoy usando ubuntu por cierto). Parece que el único código de salida para estar seguro es 0 cuando todo va bien. ¿Hay acuerdos sobre 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 la O. Descubrí que 139 es probablemente un error de memoria en el código c ... Quiero deshacerme de la probable ... No puedo obtener una descripción general de los códigos de salida . 139 = ..... (seguro)

este es el código por cierto (borró algunas cosas)

ProcessBuilder p = new ProcessBuilder(executableName, executableArguments); final Process shell = p.start(); InputStream shellIn = shell.getInputStream(); int shellExitStatus = shell.exitValue();

Nota: ejecutar el ejecutable c en el shell off ubuntu no da ningún error ... por lo que al hacer el mismo comando en proceso desde java, se obtiene el valor de salida 139, pero en el shell se obtiene el valor de salida 0


Si el sistema mata su aplicación (como en el caso de la falla de segmentación ) establece el código de salida en 128 + SIGNAL - consulte la página de manual de la signal(7) linux signal(7) para conocer los valores de la señal.

Además, para Linux, hay varios códigos de salida predeterminados definidos en el archivo de encabezado sysexits.h , y se recomienda que los programadores usen esas constantes en lugar de definir manualmente los valores propios. Desde la página exit(3) manual exit(3) :

BSD ha intentado estandarizar los códigos de salida; ver el archivo <sysexits.h> .

Aquí puede encontrar el archivo, y los valores incluidos son:

#define EX_OK 0 /* successful termination */ #define EX__BASE 64 /* base value for error messages */ #define EX_USAGE 64 /* command line usage error */ #define EX_DATAERR 65 /* data format error */ #define EX_NOINPUT 66 /* cannot open input */ #define EX_NOUSER 67 /* addressee unknown */ #define EX_NOHOST 68 /* host name unknown */ #define EX_UNAVAILABLE 69 /* service unavailable */ #define EX_SOFTWARE 70 /* internal software error */ #define EX_OSERR 71 /* system error (e.g., can''t fork) */ #define EX_OSFILE 72 /* critical OS file missing */ #define EX_CANTCREAT 73 /* can''t create (user) output file */ #define EX_IOERR 74 /* input/output error */ #define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ #define EX_PROTOCOL 76 /* remote error in protocol */ #define EX_NOPERM 77 /* permission denied */ #define EX_CONFIG 78 /* configuration error */ #define EX__MAX 78 /* maximum listed value */

Sin embargo, usarlos no es obligatorio, y puede usar cualquier valor que desee.

La respuesta general es: si su aplicación falla correctamente (es decir, es capaz de manejar el error y finalizar la ejecución), entonces establece el código de salida por sí mismo. Si el sistema mata la aplicación, es el sistema quien establece el código de salida.

También puede ver este hilo para obtener información adicional.