Cada vez que un programa Perl, Python, C ++ o Tcl se detiene con una excepción no controlada, esos tiempos de ejecución del lenguaje se encargan de registrar un código de salida distinto de cero para el proceso. Incluso los programas basados en Eclipse devuelven 1 si fallan durante el inicio. java.exe
Sin embargo, los programas ejecutados por el estándar devuelven felizmente cero sin importar cuán abruptamente terminen, a menos que el programa llame System.exit()
con un valor de salida. Incluso AssertionFailedError
o UnsatisfiedLinkError
se informa al programa de llamadas como salidas exitosas.
Por supuesto, no todos los sistemas tienen códigos de retorno de programas, pero Unix y Windows fueron lo suficientemente importantes como para garantizar java.lang.Process.exitValue()
procesos secundarios; ¿No garantizan también honrar las convenciones para los procesos de los padres?
¿Es esto una falla en el diseño del lenguaje o solo en la implementación? ¿Hay un argumento de que es una buena idea?
fuente
java
comando en Java 6 y Java 7 parecen responder con un código de salida distinto de cero si se genera una excepción no detectada.Respuestas:
Si la Especificación del lenguaje Java no define explícitamente qué valor de salida esperar, entonces no está definida y no debe confiar en ella.
Debe atrapar Throwable en su método principal y llamar a System.exit (1) usted mismo.
fuente