Historia de Unix: ¿código de retorno octal?

10

Hoy me puse desprevenido por gdb:

Program exited with code 0146.

gdbimprime el código de retorno en octal ; buscando por qué encontré: http://comments.gmane.org/gmane.comp.gdb.devel/30363

Pero esa no es una respuesta particularmente satisfactoria. Algunas búsquedas rápidas en Google no revelaron la historia, por lo que esperaba que alguien en SO supiera la historia de fondo.

Una pregunta algo relacionada, ¿cómo se vería el código de retorno en octal? ¿Quizás las máquinas más antiguas siempre imprimen el código de retorno?

$ printf %o\\n $?

Es bastante incómodo :)

Palmadita
fuente
Este $?es el valor del shell para el código de retorno y es un dígito decimal (¿o gdb también admite su cmd de ejemplo?). No sé por qué gdb lo informa en octal. Mi solución es salir del ol man asciipara ver qué significan los valores octales. Pregunta interesante, ya que también te encuentras con valores octales de otros programas. Tal vez se discuta en Kernighan y Pike 'Unix Programming Envioronment'. Buena suerte.
Shellter
El estado de salida puede ser mayor que un dígito, en realidad es un byte. Además, man asciino sería útil para convertir octal a decimal. bcSería una mejor opción.
jlliagre
2
El código de retorno es un número , no decimal u octal. El programa devuelve un estado (un byte). Con wait (3) o su tribu, el proceso padre puede encontrar mucha información sobre por qué el proceso salió (normalmente, es decir, voluntariamente llamando a la salida (2); asesinado por una señal, ...)
vonbrand

Respuestas:

6

La representación octal facilita la interpretación del código de salida para valores pequeños, que son los más utilizados. Si este número, que es un byte, se imprime en decimal, encontrar qué señal interrumpió un proceso requeriría un poco de cálculo mientras está en octal, se pueden leer tal como están:

  • sale un proceso con el estado 5, gdbmuestra 05lo que no hace ninguna diferencia
  • sale un proceso porque tiene un SIGINT( Control+ C), gdbpantallas 0202que es más fácil de reconocer como señal # 2 que 130.

Además, el estado de salida también puede ser una máscara de bits y, en tal caso, octal (al menos cuando está acostumbrado, que era más común hace un par de décadas que en la actualidad) es más fácil de convertir mentalmente en bits que decimal o incluso hexadecimal, al igual que, por ejemplo, chmodtodavía aceptar un número octal para representar los permisos de archivos: 0750 = 111 101 000 = rwx r-x ---.

jlliagre
fuente
Probablemente sea el lugar equivocado para preguntar esto, pero ¿hay una manera fácil de saber si un número dado por GDB está en octal o decimal?
marinara
3
La convención es que si comienza con cero (0), es octal.
jlliagre
3

No tengo una copia de este texto y acabo de leer la breve reseña disponible en google books pero. De acuerdo con la guía de portabilidad X / Open Sistema V Comandos y utilidades de especificación pág. 283 (según google books)

si una aplicación finaliza de manera anormal, su estado de salida es octal 0200 + y hay una lista de valores comunes de 'estado' (que probablemente también se dan en octal).

Por lo tanto, es / era un mensaje de error del hombre pobre.


fuente