Za każdym razem, gdy program Perl, Python, C ++ lub Tcl zatrzymuje się z nieobsługiwanym wyjątkiem, środowiska wykonawcze języka starają się zarejestrować niezerowy kod wyjścia dla procesu. Nawet programy oparte na Eclipse zwracają 1, jeśli zawiodą podczas uruchamiania. Programy uruchamiane przez standard java.exe
szczęśliwie zwracają zero, bez względu na to, jak gwałtownie się kończą, chyba że program System.exit()
wywoła wartość wyjściową. Nawet AssertionFailedError
lub UnsatisfiedLinkError
są zgłaszane do programu wywołującego jako pomyślne wyjścia.
Oczywiście nie wszystkie systemy mają kody powrotu programów, ale Unix i Windows były na tyle ważne, że gwarantowały java.lang.Process.exitValue()
procesy potomne; czy nie gwarantują również przestrzegania konwencji dotyczących procesów macierzystych?
Czy to wada w projektowaniu języka, czy tylko we wdrażaniu? Czy istnieje argument, że to dobry pomysł?
źródło
java
Polecenia w Java 6 i Java 7 oba wydają się odpowiadać z niezerowym kodem wyjścia jeśli nieprzechwycony jest wyjątek.Odpowiedzi:
Jeśli specyfikacja języka Java nie określa wprost oczekiwanej wartości wyjściowej, jest ona niezdefiniowana i nie należy na niej polegać.
Musisz złapać Throwable w swojej głównej metodzie i sam wywołać System.exit (1).
źródło