잡히지 않은 예외 후에 왜 Java가 성공적으로 종료됩니까?


24

Perl, Python, C ++ 또는 Tcl 프로그램이 처리되지 않은 예외로 중지 될 때마다 해당 언어 런타임은 프로세스에 대해 0이 아닌 종료 코드를 등록합니다. Eclipse 기반 프로그램조차 시작 중에 실패하면 1을 리턴합니다. java.exe그러나 표준으로 실행되는 프로그램 은 프로그램 System.exit()이 종료 값으로 호출하지 않는 한 아무리 갑자기 끝나더라도 행복하게 0을 반환 합니다. 짝수 AssertionFailedError또는 UnsatisfiedLinkError성공 종료로 호출 프로그램에 다시보고됩니다.

물론 모든 시스템에 프로그램 리턴 코드가있는 것은 아니지만 Unix와 Windows는 java.lang.Process.exitValue()하위 프로세스 를 보증 할만큼 중요했습니다 . 부모 프로세스에 대한 명예 협약도 보증하지 않습니까?

이것이 언어 디자인이나 구현상의 결함입니까? 좋은 생각이라는 주장이 있습니까?


이것이 StackOverflow에 더 적합하지 않은지 궁금합니다 ...하지만 의견입니다.
gablin

@gablin Mmm, 실제로 SO 에이 질문을 작성하기 시작한 다음 마음이 바뀌고 여기에 게시했습니다.
James

4
포착되지 않은 예외가 발생하면 Java 6Java 7java명령이 모두 0이 아닌 종료 코드로 응답하는 것으로 보입니다.
dimo414

답변:


28

Java 언어 사양이 명시 적으로 종료 값이 무엇을 기대 정의하지 않는 경우, 다음이되어 정의되지 않은 당신은 그것에 의존해서는 안됩니다.

기본 메소드에서 Throwable을 잡아서 System.exit (1)을 직접 호출해야합니다.


8
정의되지 않은 상태로 두는 것이 단점이 아닌가?
James

3
그럴 수도 있고 아닐 수도 있고. 유일한 중요한 것은 JLS가 말한 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.