문제

그렇다면, 어떤 운영 체제, 쉘 또는 무엇이든?

다음 Java 프로그램을 고려하십시오 (예를 들어 Java를 사용하고 있습니다. 모든 언어는이 질문에 좋을 것입니다. 이는 운영 시스템에 관한 것입니다).

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

Linux와 Bash에서 실행하면 항상 값이 덜 동일하게 255를 반환합니다.echo $? 이전 실행 된 명령의 종료 코드를 인쇄)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

편집 : 아래의 (지금까지만) 아래의 답변은 Unixes에서 무슨 일이 일어나는지 완전히 설명합니다. 나는 여전히 다른 OS에 대해 궁금합니다.

도움이 되었습니까?

해결책

유닉스 및 파생 상품에서는 불가능합니다. 반환 된 종료 상태 정보는 두 개의 8 비트 필드로 구성됩니다. 하나는 출구 상태를 포함하는 하나는 사망 원인에 대한 정보가 포함되어 있습니다 (0 프로그램 제어 하에서 질서 출구를 암시하고 신호가 사망했음을 나타내는 기타 값은 코어가 덤프되었습니다).

다른 팁

최신 창, OS 자체 및 기본 콘솔 쉘 (CMD.EXE), 적어도 32 비트 서명 된 정수의 전체 범위에서 출구 코드를 수락하고 보여줍니다. 위의 예제를 실행합니다 CMD.EXE 요청한 출구 코드를 제공합니다.

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

Windows는 실제로 Unix 신호의 개념을 가지고 있지 않으며 종료 코드를 납치하여 추가 정보를 추가하려고 시도하지 않습니다. 쉘 (또는 모든 프로그램이 종료 코드를 읽는 모든 프로그램)이 그렇게하지 않는 한, 그렇지 않으면 그렇게하지 않습니다. 반환 한 출구 코드를 되 찾아야합니다. 다행히 Microsoft의 C 런타임 (MS Visual C ++로 편집 된 모든 프로그램 포함)을 사용하는 프로그램은 종료 프로세스에서 출구 코드를 보존합니다.

Windows에는 14,000 개가 넘는 더 많은 출구 코드가 있습니다. (나는 당신이 종종 자신의 화면에서 그들 중 일부를 본 확신합니다).

여기 온다 :

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top