En informática , el estado de salida , o código de salida , de un proceso terminado es un número entero que se pone a disposición de su proceso padre (o llamador). En DOS , esto puede denominarse nivel de error .
Cuando se ejecutan programas de computadora, el sistema operativo crea una entidad abstracta llamada proceso en el que se mantiene la contabilidad de ese programa. En sistemas operativos multitarea como Unix o Linux , los procesos activos pueden crear nuevos procesos. El proceso que genera otro se denomina proceso padre , mientras que los creados son procesos hijo . Los procesos secundarios se ejecutan simultáneamente con el proceso principal. La técnica de generación de procesos secundarios se utiliza para delegar parte del trabajo a un proceso secundario cuando no hay motivo para detener la ejecución del proceso primario. Cuando el niño termina de ejecutarse, sale llamando a la llamada al sistema de salida . Esta llamada al sistema facilita pasar el código de estado de salida al padre, que puede recuperar este valor mediante la llamada al sistema de espera .
El padre y el niño pueden comprender el significado de los estados de salida. Por ejemplo, es una práctica de programación común que un proceso hijo devuelva (salga con) cero al padre, lo que significa éxito. Además de este valor de retorno del hijo, el proceso padre también puede disponer de otra información, como cómo salió el proceso, ya sea normalmente o mediante una señal .
El conjunto específico de códigos devueltos es exclusivo del programa que lo establece. Normalmente indica éxito o fracaso. El valor del código devuelto por la función o programa puede indicar una causa específica de falla. En muchos sistemas, cuanto mayor sea el valor, más grave será la causa del error. [1] Alternativamente, cada bit puede indicar una condición diferente, y el operador o las evalúa juntas para dar el valor final; por ejemplo, fsck hace esto.
A veces, si los códigos se diseñan con este propósito en mente, se pueden usar directamente como índice de rama al regresar al programa inicial para evitar pruebas adicionales.
En AmigaOS , MorphOS y AROS , se definen cuatro niveles:
Los scripts de Shell normalmente ejecutan comandos y capturan sus estados de salida.
Para los propósitos del shell, un comando que sale con un estado de salida cero ha tenido éxito. Un estado de salida distinto de cero indica un error. Este esquema aparentemente contrario a la intuición se utiliza para que haya una forma bien definida de indicar el éxito y una variedad de formas de indicar varios modos de falla. Cuando un comando finaliza con una señal cuyo número es N, un shell establece la variable $? a un valor mayor que 128. La mayoría de los shells usan 128+N, mientras que ksh93 usa 256+N.
Si no se encuentra un comando, el shell debería devolver un estado de 127. Si se encuentra un comando pero no es ejecutable, el estado de retorno debería ser 126. [2] Tenga en cuenta que este no es el caso para todos los shells.
Si un comando falla debido a un error durante la expansión o redirección, el estado de salida es mayor que cero.
El lenguaje de programación C permite que los programas que salen o regresan de la función principal indiquen el éxito o el fracaso al devolver un número entero o devolver las macros EXIT_SUCCESS
y EXIT_FAILURE
. En sistemas tipo Unix, estos son iguales a 0 y 1 respectivamente. [3] El programa AC también puede utilizar la exit()
función que especifica el estado del número entero o la macro de salida como primer parámetro.
El valor de retorno main
se pasa a la exit
función, que para valores cero, EXIT_SUCCESS
o EXIT_FAILURE
puede traducirlo a "una forma definida por la implementación" de terminación exitosa o terminación fallida . [ cita necesaria ]
Aparte de cero y las macros EXIT_SUCCESS
y EXIT_FAILURE
, el estándar C no define el significado de los códigos de retorno. Las reglas para el uso de códigos de retorno varían en diferentes plataformas (consulte las secciones específicas de la plataforma).
En terminología de DOS, un nivel de error es un código de salida entero devuelto por un programa o subrutina ejecutable . Los niveles de error suelen oscilar entre 0 y 255. [4] [5] [6] [7] En DOS sólo hay 256 códigos de error disponibles, pero DR DOS 6.0 y versiones posteriores admiten códigos de error de 16 bits al menos en CONFIG.SYS . [6] Con 4DOS y DR-DOS COMMAND.COM , los códigos de salida (en trabajos por lotes) se pueden configurar mediante EXIT n [6] y (en CONFIG.SYS) mediante ERROR= n . [6]
Los estados de salida a menudo son capturados por programas por lotes mediante comandos IF ERRORLEVEL . [4] [6] DOS multiusuario admite una variable de entorno reservada %ERRORLVL% que se actualiza automáticamente al regresar de las aplicaciones. COMMAND.COM bajo DR-DOS 7.02 y superior admite una variable de pseudoentorno similar %ERRORLVL% así como %ERRORLEVEL% . En CONFIG.SYS, DR DOS 6.0 y versiones posteriores admiten ONERROR para probar el estado de carga y el código de retorno de los controladores de dispositivos y el código de salida de los programas. [6]
En Java, cualquier método puede llamar System.exit(int status)
, a menos que un administrador de seguridad no lo permita. Esto finalizará la máquina virtual Java que se está ejecutando actualmente. "El argumento sirve como código de estado; por convención, un código de estado distinto de cero indica una terminación anormal". [8]
En OpenVMS , el éxito se indica con valores impares y el fracaso con valores pares. El valor es un entero de 32 bits con subcampos: bits de control, número de instalación, número de mensaje y gravedad. Los valores de gravedad se dividen entre éxito (éxito, informativo) y fracaso (advertencia, error, fatal). [9]
En C del Plan 9, el estado de salida se indica mediante una cadena pasada a la función de salidas , y la función principal es de tipo void .
En Unix y otros sistemas compatibles con POSIX , el proceso principal puede recuperar el estado de salida de un proceso secundario utilizando la wait()
familia de llamadas al sistema definidas en wait.h. [10] De estas, la llamada waitid()
[11] recupera el estado de salida completo, pero las llamadas más antiguas wait()
y waitpid()
[12] recuperan solo los 8 bits menos significativos del estado de salida.
Las interfaces wait()
y waitpid()
establecen un valor de estado de tipo int
empaquetado como un campo de bits con varios tipos de información de terminación secundaria. Si el niño terminó saliendo (según lo determinado por la WIFEXITED()
macro; la alternativa habitual es que murió debido a una señal no detectada ), SUS especifica que los 8 bits de orden inferior del estado de salida se pueden recuperar del valor de estado usando la WEXITSTATUS()
macro.
En la waitid()
llamada al sistema (agregada con SUSv1), el estado de salida del niño y otra información ya no están en un campo de bits sino en la estructura de tipo siginfo_t
. [13]
Los sistemas compatibles con POSIX suelen utilizar una convención de cero para el éxito y distinta de cero para el error. [14] Se han desarrollado algunas convenciones en cuanto a los significados relativos de varios códigos de error; por ejemplo, GNU recomienda que los códigos con el bit alto establecido se reserven para errores graves. [3]
Los sistemas operativos derivados de BSD han definido un amplio conjunto de interpretaciones preferidas: los significados de 15 códigos de estado del 64 al 78 se definen en sysexits.h. [15] Históricamente, estos se derivan de sendmail y otros agentes de transferencia de mensajes , pero desde entonces han encontrado uso en muchos otros programas. [dieciséis]
La Guía avanzada de secuencias de comandos Bash y /usr/include/sysexits.h tienen información sobre el significado de los códigos de estado de salida distintos de 0. [17]
Microsoft Windows utiliza enteros sin signo de 32 bits como códigos de salida, [18] [19] aunque el intérprete de comandos los trata como si estuvieran firmados. [20]
Los códigos de salida son referenciados directamente, por ejemplo, por el intérprete de línea de comandos CMD.exe en la errorlevel
terminología heredada de DOS . Los procesos de .NET Framework y Windows PowerShell se refieren a él como ExitCode
propiedad del Process
objeto.
{{cite book}}
: |work=
ignorado ( ayuda ) [1] [2] Archivado el 11 de septiembre de 2017 en archive.today (NB. BATTIPS.TXT es parte de MPDOSTIP.ZIP. El enlace proporcionado apunta a una versión anterior convertida en HTML de BATTIPS.TXT archivo.) [3]{{cite book}}
: |work=
ignorado ( ayuda ) (NB. NWDOSTIP.TXT es un trabajo completo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características e componentes internos no documentados. El enlace proporcionado apunta a una versión convertida en HTML del archivo, que forma parte de la MPDOSTIP.ZIP
colección.) [4]