Hoje fui pego de surpresa por gdb
:
Program exited with code 0146.
gdb
imprime o código de retorno em octal ; procurando por que encontrei:
http://comments.gmane.org/gmane.comp.gdb.devel/30363
Mas essa não é uma resposta particularmente satisfatória. Uma pesquisa rápida no Google não revelou a história, então eu esperava que alguém na SO conhecesse a história por trás.
Uma pergunta um tanto relacionada, como alguém veria o código de retorno em octal? Talvez máquinas mais antigas sempre imprimissem o código de retorno?
$ printf %o\\n $?
É muito estranho :)
$?
é o valor do shell para o código de retorno e é um dígito decimal (ou o gdb também suporta o seu exemplo de cmd?). Não sei por que o gdb o informa em octal. Minha solução é sair do campoman ascii
para ver o que significam os valores octais. Pergunta interessante, como você também encontra valores octais de outros programas. Talvez isso seja discutido no 'Unix Programming Envioronment' de Kernighan e Pike. Boa sorte.man ascii
seria inútil converter octal em decimal.bc
seria uma escolha melhor.Respostas:
A representação octal facilita a interpretação do código de saída para valores pequenos, que são os mais usados. Se esse número, que é um byte, for impresso em decimal, descobrindo qual sinal interrompeu um processo exigiria um pouco de cálculo enquanto em octal, eles podem ser lidos como estão:
gdb
exibe o05
que não faz diferençaSIGINT
( Control+ C),gdb
exibe0202
que é mais fácil reconhecer como sinal # 2 do que130
.Além disso, o status de saída também pode ser uma máscara de bits e, nesse caso, octal (pelo menos quando você está acostumado a isso, que era mais comum algumas décadas atrás do que atualmente) é mais fácil de converter mentalmente em bits do que decimal ou mesmo hexadecimal, como, por exemplo,
chmod
ainda aceitam um número octal para representar as permissões de arquivo:0750 = 111 101 000 = rwx r-x ---
.fonte
Eu não tenho uma cópia deste texto e apenas li a breve sinopse disponível no google books, mas. De acordo com o Guia de portabilidade X / Open, comandos e utilitários de especificação do Sistema V pág. 283 (de acordo com o google books)
se um aplicativo terminar de forma anormal, seu status de saída é octal 0200 + e há uma lista de valores comuns de 'status' (que provavelmente também são fornecidos em octal).
Portanto, é / foi uma mensagem de erro do homem pobre.
fonte