유닉스 역사: 반환 코드가 8진수인가요?

유닉스 역사: 반환 코드가 8진수인가요?

오늘 나를 당황하게 만든 것은 다음과 같습니다 gdb.

Program exited with code 0146.

gdb반환 코드 인쇄8진수;찾은 이유를 조사해 보면: http://comments.gmane.org/gmane.comp.gdb.devel/30363

그러나 그것은 특별히 만족스러운 대답은 아닙니다. 일부 빠른 Google 검색에서는 기록이 공개되지 않았기 때문에 누군가가 그 뒤에 숨겨진 이야기를 알 수 있기를 바랐습니다.

다소 관련된 질문입니다. 8진수 반환 코드를 어떻게 확인합니까? 어쩌면 오래된 기계는 항상 반환 코드를 인쇄할까요?

$ printf %o\\n $?

너무 부끄러워요 :)

답변1

8진수 표현은 가장 일반적으로 사용되는 작은 값에 대한 종료 코드의 해석을 단순화합니다. 이 숫자(바이트)가 10진수로 인쇄되면 프로세스를 중단한 신호를 찾는 데 약간의 계산이 필요하지만 8진수에서는 있는 그대로 읽을 수 있습니다.

  • 프로세스는 상태 5로 종료되며 차이가 없습니다 gdb.05
  • 표시된 신호 #2보다 식별하기 쉬운 SIGINT( Control+ C) 가 있기 때문에 프로세스가 종료됩니다 .gdb0202130

또한 종료 상태는 비트마스크일 수 있습니다. 이 경우 8진수(적어도 익숙해졌을 때는 지금보다 수십 년 전에 더 일반적이었습니다)는 10진수 또는 심지어 처럼 bithex로 정신적으로 변환하기가 더 쉽습니다. chmod파일 권한을 나타내기 위해 8진수는 여전히 허용됩니다: 0750 = 111 101 000 = rwx r-x ---.

답변2

기사 사본은 없고, 그냥 구글북스에서 간략한 개요를 읽어보세요. X/Open 이식성 가이드 System V 특정 명령 및 유틸리티 페이지 283에 따르면(Google 도서에 따르면)

애플리케이션이 비정상적으로 종료되는 경우 해당 종료 상태는 8진수 0200 + 상태이며 일반적인 "상태" 값 목록이 있습니다(8진수로 제공될 수도 있음).

그래서 이것은 가난한 사람의 오류 메시지입니다.

관련 정보