Linux 프로 세 스 종료 코드

2789 단어
우선, 우 리 는 테스트 프로그램 을 하나 씁 니 다. 아주 간단 합 니 다. 몇 줄 의 코드:
#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 는 실 패 를 표시 합 니 다.

좋은 웹페이지 즐겨찾기