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?
quelle
java
Befehl in Java 6 und Java 7 scheint mit einem Exit-Code ungleich Null zu antworten, wenn eine nicht abgefangene Ausnahme ausgelöst wird.Antworten:
Wenn in der Java-Sprachspezifikation nicht explizit definiert ist, welcher Exit-Wert zu erwarten ist, ist sie undefiniert und Sie sollten sich nicht darauf verlassen.
Sie müssen Throwable in Ihrer Hauptmethode abfangen und System.exit (1) selbst aufrufen.
quelle