Jedes Mal, wenn ein Perl-, Python-, C ++ - oder Tcl-Programm mit einer nicht behandelten Ausnahme angehalten wird, achten diese Sprachlaufzeiten darauf, einen Exit-Code ungleich Null für den Prozess zu registrieren. Sogar Eclipse-basierte Programme geben 1 zurück, wenn sie während des Startvorgangs fehlschlagen. Nach dem Standard ausgeführte Programme geben java.exe
jedoch problemlos Null zurück, egal wie plötzlich sie enden, es sei denn, das Programm ruft System.exit()
mit einem Exit-Wert auf. Gerade AssertionFailedError
oder UnsatisfiedLinkError
werden als erfolgreiche Exits an das aufrufende Programm zurückgemeldet.
Natürlich haben nicht alle Systeme Programmrückgabecodes, aber Unix und Windows waren wichtig genug, java.lang.Process.exitValue()
um untergeordnete Prozesse zu gewährleisten. Gewähren sie nicht auch die Einhaltung von Konventionen für übergeordnete Prozesse?
Ist das ein Fehler im Sprachdesign oder nur in der Implementierung? Gibt es ein Argument, dass es eine gute Idee ist?