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.exeSin 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 AssertionFailedErroro UnsatisfiedLinkErrorse 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?