0이 아닌 종료 코드가 잘 작동합니까?

0이 아닌 종료 코드가 잘 작동합니까?

내가 이해하는 바에 따르면 유닉스 쉘 쉘 스크립트는 발행할 수 있고 발행해야 합니다.종료 코드. 종료 코드 0은 프로그램이 성공적으로 완료되었음을 나타내고, 양의 정수 종료 코드(1-255)는 프로그램이 종료될 때 오류가 발생했음을 나타냅니다.

어떤 것이 있습니까 - Unix 시스템? 껍데기? (어떤 용어를 사용해야 할지 잘 모르겠습니다.) --특정 의미를 위해 이러한 255 오류 종료 코드를 유지하시겠습니까? 즉, 나는 명령줄 프로그램을 만들고 있는데 잘 행동하는 유닉스 시민이 되고 싶습니다. 내 프로그램이 0이 아닌 종료 코드를 반환하도록 안전하게 설정하고 해당 코드를 내 프로그램에 적용할 수 있습니까? 아니면 시스템 자체가 특정 종료 코드를 특정 방식으로 해석하기 때문에 내 프로그램에서 특정 종료 코드를 사용하면 안 됩니까?

답변1

(답변에서 도난당한 편집, 질문 의견에서 인용, 궁극적으로 지적여기).

쉘 스크립트에서는 특정 조건에 대해 128 이상의 가짜 종료 상태가 제공되므로 이러한 상황을 피하는 것이 가장 좋습니다. (ssh는 255를 사용하지만 이런 방식으로 사용되지는 않습니다.)

128 아래의 두 가지 종료 상태는 특정 셸 오류를 나타내는 데에도 사용되므로 일반적으로 이러한 코드도 사용하지 않는 것이 좋습니다.

BSD는 64부터 시작하여 일부 종료 코드를 표준화하려고 계속 노력하고 있습니다. 사랑에 빠지면 사용하는데 아무런 문제가 없다고 생각합니다(sysexit.h를 검색하세요. 공식 표준이 아니므로 복사해야 합니다). 이것을 사용하지 않으면 "64 미만"이 126 :-P보다 더 나은 정수입니다. 즉, 쉘이나 커널 모두 이에 대해 신경 쓰지 않습니다. 이는 공동 작업 프로그램, 특히 메일러 구성 요소 간에 사용됩니다. 63개 이상의 "오류" 상태를 원한다면 Unix에서 해당 상태가 "보존"되는 것에 대해 걱정하지 않아도 됩니다.

시스템 호출 인터페이스 자체는 커널이라고도 하며 실제로는 상관하지 않습니다. 시스템 호출에서는 특별한 종료 상태가 인코딩됩니다.대역 외0~255 범위 내. 이는 쉘이 SIGKILL에 의해 종료된 명령에 대해 "Killed" 상태를 감지하고 인쇄하는 방법입니다. 이 대역 외 정보는 간단한 호출로는 exit위조 할 수 없습니다.

만약에상태NULL이 아닙니다.기다리다() 그리고대기 프로세스() 매장상태정보정수그것이 무엇을 가리키는지. 이 정수는 다음 매크로를 사용하여 확인할 수 있습니다(이 매크로는 다음과 같이 정수 자체를 포인터로 사용하지 않고 인수로 사용합니다). 기다리다() 그리고대기 프로세스()! ):

내 아내가 나를 속였습니다 (상태)자식 프로세스가 정상적으로 종료되면 true를 반환합니다. 즉, 호출을 통해출구(3) 또는_출구(2) 또는 main()에서 돌아옵니다.

우리의 종료 상태(상태)자식 프로세스의 종료 상태를 반환합니다. 이는 최하위 8비트로 구성됩니다.상태호출에서 하위 항목이 지정한 매개변수출구(3) 또는_출구(2) 또는 main()의 return 문의 매개변수로 사용됩니다. 이 매크로는 다음 상황에서만 사용해야 합니다. 아내의 부정 행위참을 반환합니다.

WIF 신호(상태)자식 프로세스가 신호에 의해 종료된 경우 true를 반환합니다.

WTERMSIG(상태)하위 프로세스를 종료시킨 신호 번호를 반환합니다. 이 매크로는 다음 상황에서만 사용해야 합니다.WIF 신호참을 반환합니다.

WCOREDUMP(상태)하위 프로세스가 코어 덤프를 생성한 경우 true를 반환합니다. 이 매크로는 다음 상황에서만 사용해야 합니다. WIF 신호참을 반환합니다. 이 매크로는 POSIX.1-2001에 지정되어 있지 않으며 일부 UNIX 구현(예: AIX, SunOS)에서는 사용할 수 없습니다. #ifdef WCOREDUMP ... #endif에 포함된 경우에만 이것을 사용하십시오.

WIF가 중지되었습니다(상태)신호 전달로 인해 하위 프로세스가 중지된 경우 true를 반환합니다. 호출이 완료된 경우에만 사용할 수 있습니다.윈터리드또는 어린이가 추적되고 있을 때(참조(2)).

WSTOPSIG(상태)하위 프로세스를 중지시킨 신호 번호를 반환합니다. 이 매크로는 다음 상황에서만 사용해야 합니다.무선 네트워크가 중지되었습니다참을 반환합니다.

WIF 계속 (상태)(Linux 2.6.10부터) 다음을 전달하여 하위 프로세스가 재개되면 true를 반환합니다. 신호 제어.

그리고

ssh는 원격 명령의 종료 상태로 종료되거나, 오류가 발생하면 255로 종료됩니다.

그리고

$ a
bash: a: command not found...
$ echo $?
127
$ /dev/null
bash: /dev/null: Permission denied
$ echo $?
126

관련 정보