Pregunta

En caso afirmativo, ¿en qué sistema operativo, shell o lo que sea?

Considere el siguiente programa java (estoy usando java solo como ejemplo, cualquier lenguaje sería bueno para esta pregunta, que trata más sobre sistemas operativos):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

Al ejecutarlo en Linux y bash, devuelve siempre valores menos iguales a 255, por ejemplo. ( echo $? imprime el código de salida del comando ejecutado anteriormente)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

EDITADO: la respuesta (solo, hasta ahora) a continuación explica completamente lo que sucede en UNIXes. Todavía me estoy preguntando acerca de otros sistemas operativos.

¿Fue útil?

Solución

No es posible en Unix y derivados. La información de estado de salida devuelta consta de dos campos de 8 bits, uno que contiene el estado de salida y el otro que contiene información sobre la causa de la muerte (0 implica salida ordenada bajo el control del programa, otros valores que indican que una señal lo eliminó e indica si un núcleo fue objeto de dumping).

Otros consejos

En Windows moderno, el propio sistema operativo y el shell de la consola predeterminada ( CMD.EXE ), acepte y muestre los códigos de salida en al menos todo el rango de enteros con signo de 32 bits. Al ejecutar el ejemplo anterior en CMD.EXE , aparecen los códigos de salida que solicitó:

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

Windows realmente no tiene el concepto de señales Unix, ni intenta secuestrar el código de salida para agregar información adicional, por lo que siempre que la shell (o cualquier programa termine leyendo el código de salida) no funcione. que tampoco, debe recuperar los códigos de salida que devolvió. Afortunadamente, los programas que utilizan el tiempo de ejecución C de Microsoft (incluidos todos los programas compilados con MS Visual C ++) conservan el código de salida tal como se encuentra en los procesos de salida.

Windows tiene muchos más códigos de salida, más de 14,000. (Estoy seguro de que a menudo viste algunos de ellos en tu propia pantalla).

Aquí viene:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top