Linux 프로 세 스 종료 코드
#include
int main(void)
{
return -1;
}
컴 파일 하고 실행 한 다음 셸 에서 프로 세 스 종료 코드 를 보고 입력: echo $?,우 리 는 받 은 프로 세 스 종료 코드 가 255 라 는 것 을 발견 했다.
우리 가 돌아 온 것 은 분명 - 1 인 데 왜 255 를 받 았 을 까?또한 프로 세 스 의 상태 코드 부터 말 해 야 합 니 다. 프로 세 스 가 종 료 될 때 부모 프로 세 스 는 보통 마무리 작업 을 합 니 다. wait 나 waitpid 를 호출 하여 프로 세 스 의 상태 코드 를 가 져 오 는 것 이 바로 status code 입 니 다. 우 리 는 이 두 시스템 에서 호출 된 함수 원형 을 통 해 알 수 있 습 니 다.
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
status 지침 은 받 은 상태 코드 정 보 를 전달 할 수 있 지만 상태 코드 는 종료 코드 와 같 지 않 습 니 다. 즉, status code ≠ exit code 입 니 다. 우 리 는 먼저 상태 코드 의 구성 을 살 펴 보 겠 습 니 다.
The exit status returned by 'wait()' is a 16-bit value. Of those 16 bits, the high-order 8 bits come from the low-order 8 bits of the value returned by 'exit()' - or the value returned from
main()
. If the program dies naturally, the low-order 8 bits of the 16 are all zero. If the program dies because of signal, the low-order 8 bits encode the signal number and a bit indicating whether a core dump happened. With a signal, the exit status is treated as zero - programs like the shell tend to interpret the low-order bits non-zero as a failure. +-----------------+| exit | signal |+-----------------+
Most machines actually store the 16-bit value in a 32-bit integer, and that is handled with unsigned arithmetic.
위의 이 영 어 는 stackoverflow 에서 나 온 말 입 니 다. 즉, 프로 세 스 가 종료 할 때의 상태 코드 는 16 비트 이 고, 높 은 8 비트 저장 소 는 종료 코드 이 며, 낮은 8 비트 저장 소 는 프로 세 스 가 종료 되 는 신호 표지 위치 입 니 다. 그러면 이제 상태 코드 의 구성 을 알 았 으 니 프로그램의 종료 코드 를 꺼 내 는 것 은 어렵 지 않 습 니 다. 하지만 이것 은 우리 가 코드 를 쓰 지 않 아 도 됩 니 다.Linux 는 이미 해당 하 는 매크로 를 제공 했다. WEXITSTATUS, 이 매크로 는 상태 코드 에서 종료 코드 를 꺼 내 는 데 사용 된다.
우리 의 화제 로 돌아 가면 왜 255 의 문제 로 돌아 갑 니까? - 1 8 비트 2 진법 에 대응 하 는 것 은 1111 1111 입 니 다. 모두 1 입 니 다. 그것 을 부호 없 는 숫자 로 하 는 것 이 255 입 니 다.왜 그것 을 기호 수로 간주 할 수 없 습 니까?탈퇴 코드 범위 0 - 255 는 POSIX 1003.1 표준 이 규범 화 된 것 이기 때문에 이 범 위 를 넘 어 서 는 안 된다.결론: exit (- 1) 또는 main 함수 에서 되 돌아 오지 않 는 것 이 좋 습 니 다. - 1. 이것 은 좋 지 않 은 습관 입 니 다. 매크로: EXIT 를 사용 할 수 있 습 니 다.성공 을 나타 내 는 SUCCESS, EXITFAILURE 는 실 패 를 표시 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.