유닉스 역사 : 리턴 코드 8 진?


10

나는 오늘 다음과 gdb같이 경비를 버렸다 .

Program exited with code 0146.

gdb리턴 코드를 8 진수 로 인쇄합니다 . 내가 찾은 이유를 조사한 결과 : http://comments.gmane.org/gmane.comp.gdb.devel/30363

그러나 이것은 특히 만족스러운 답변이 아닙니다. 일부 빠른 인터넷 검색은 역사를 밝히지 않았으므로 누군가가 뒷이야기를 알기를 바랐습니다.

다소 관련된 질문, 어떻게 리턴 코드를 8 진수로 볼 수 있습니까? 아마도 오래된 기계는 항상 리턴 코드를 인쇄 했습니까?

$ printf %o\\n $?

꽤 어색합니다 :)


$?리턴 코드에 대한 쉘의 값이며 10 진수입니다 (또는 gdb가 예제 cmd도 지원합니까?). gdb가 8 진수로보고하는 이유를 모릅니다. 내 해결책은 man ascii8 진수 값의 의미를 확인 하기 위해 'ol'을 얻는 것 입니다. 다른 프로그램에서도 8 진수 값을 사용할 때 흥미로운 질문입니다. 아마도 Kernighan과 Pike의 'Unix Programming Envioronment'에서 논의 될 것입니다. 행운을 빕니다.
shellter

종료 상태는 숫자보다 클 수 있으며 실제로는 바이트입니다. 또한 man ascii8 진수를 10 진수로 변환하는 데 쓸모가 없습니다. bc더 나은 선택이 될 것입니다.
jlliagre

2
리턴 코드는 것입니다 숫자 가 아닌 진수 또는 진수. 프로그램은 상태 (1 바이트)를 반환합니다. (... 신호에 의해 살해 즉, 자발적으로 종료 (2)를 호출하여, 일반적으로) 대기 (3) 또는 그 부족으로 부모 프로세스는 프로세스가 종료 이유에 대한 더 많은 정보를 얻을 수있다
vonbrand

답변:


6

8 진 표현은 가장 일반적으로 사용되는 작은 값에 대한 종료 코드의 해석을 용이하게합니다. 바이트 인이 숫자가 10 진수로 인쇄되어 프로세스를 중단 한 신호를 찾아 8 진수 동안 약간의 계산이 필요한 경우 다음과 같이 읽을 수 있습니다.

  • 상태 (5)와 프로세스가 종료, gdb디스플레이 05차이가 없습니다
  • 프로세스가 SIGINT( Control+ C)를 얻었 기 때문에 종료 되고 gdb디스플레이 0202가 신호 # 2로 인식하기가 더 쉽습니다 130.

또한 종료 상태도 비트 마스크 일 수 있으며,이 경우 8 진수 (최소 수십 년 전에 요즘보다 일반적으로 익숙한 경우)는 정신적으로 10 진수 또는 10 진수보다 비트로 쉽게 변환 할 수 있습니다. 예를 들어 16 진수는 chmod여전히 파일 사용 권한을 나타내는 8 진수를 허용합니다 0750 = 111 101 000 = rwx r-x ---.


아마도 이것을 묻는 잘못된 장소 일지 모르지만 GDB가 제공 한 숫자가 8 진수인지 10 진수인지 쉽게 알 수 있습니까?
marinara

3
규칙은 0으로 시작하면 8 진입니다.
jlliagre

3

이 텍스트의 사본이 없으며 Google 도서에서 제공되는 짧은 글을 읽으십시오. X / Open Portability 안내서에 따르면 System V 사양 명령 및 유틸리티 pg 283 (Google 도서에 따름)

응용 프로그램이 비정상적으로 종료되면 종료 상태는 8 진수 0200 + 상태이며 일반적인 '상태'값 목록이 있습니다 (아마도 8 진수로 표시됨).

그래서 그것은 나쁜 망 오류 메시지입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.