stringtranslate.com

Estado de salida

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 .

Semántica

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.

AmigaOS

En AmigaOS , MorphOS y AROS , se definen cuatro niveles:

Shell y scripts

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.

lenguaje c

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 mainse pasa a la exitfunción, que para valores cero, EXIT_SUCCESSo EXIT_FAILUREpuede 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_SUCCESSy 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).

DOS

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]

Java

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]

AbiertoVMS

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]

plano 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 .

POSIX

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 intempaquetado 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]

ventanas

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 errorlevelterminología heredada de DOS . Los procesos de .NET Framework y Windows PowerShell se refieren a él como ExitCodepropiedad del Processobjeto.

Ver también

Referencias

  1. ^ "Niveles de error". Páginas de secuencias de comandos de Rob van der Woude . Consultado el 26 de agosto de 2007 .
  2. ^ "Lenguaje de comandos de Shell: estado de salida de los comandos". El grupo abierto . Consultado el 7 de julio de 2015 .
  3. ^ ab "Manual de referencia de la biblioteca GNU C 25.6.2: estado de salida". Gnu.org . Consultado el 9 de julio de 2012 .
  4. ^ ab Paul, Matthias R. (1 de mayo de 1997) [1 de octubre de 1993]. BATTIPs: consejos y trucos para Programmierung von Batchjobs (en alemán). 7: NIVEL DE ERROR aparece. Archivado desde el original el 23 de agosto de 2017 . Consultado el 23 de agosto de 2017 . {{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 a HTML de BATTIPS.TXT archivo.) [3]
  5. ^ Auer, Eric; Pablo, Matías R.; Salón, Jim (24 de diciembre de 2015) [31 de diciembre de 2003]. "Niveles de error de MS-DOS". Archivado desde el original el 24 de diciembre de 2015.
  6. ^ abcdef Paul, Matthias R. (30 de julio de 1997) [1 de mayo de 1994]. NWDOS-TIP: consejos y trucos para Novell DOS 7, con un clic para deshacer detalles, errores y soluciones. Versión 157 (en alemán) (3 ed.). Archivado desde el original el 4 de noviembre de 2016 . Consultado el 6 de agosto de 2014 . {{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.ZIPcolección.) [4]
  7. ^ Allen, William; Allen, Linda. "NIVELES DE ERROR de Windows 95/98/ME". Archivado desde el original el 7 de julio de 2011.
  8. ^ "API de Java 1.6.0". Microsistemas solares . Consultado el 6 de mayo de 2008 .
  9. ^ "Formato OpenVMS de valores de estado de retorno". H71000.www7.hp.com. Archivado desde el original el 19 de marzo de 2012 . Consultado el 9 de julio de 2012 .
  10. ^ sys_wait.h  - Referencia de definiciones básicas, especificación única de UNIX , versión 4 de The Open Group
  11. ^ waitid  - Referencia de interfaces del sistema, especificación única de UNIX , versión 4 de The Open Group
  12. ^ wait  - Referencia de interfaces del sistema, especificación única de UNIX , versión 4 de The Open Group
  13. ^ "2.4.3 Acciones de señal". El grupo abierto . Consultado el 8 de febrero de 2019 .
  14. ^ "Capítulo 6. Salida y estado de salida". Preguntas frecuentes.org . Consultado el 9 de julio de 2012 .
  15. ^ sysexits(3) : códigos de salida preferibles para programas -  Manual de funciones de la biblioteca FreeBSD
  16. ^ La búsqueda en Google de «"sysexits.h» sitio:github.com» informa «Aproximadamente 3540 resultados»; Consultado el 21 de febrero de 2013.
  17. ^ "Códigos de salida con significados especiales".
  18. ^ "Función de proceso de salida" . Consultado el 16 de diciembre de 2016 .
  19. ^ "Función GetExitCodeProcess" . Consultado el 22 de abril de 2022 .
  20. ^ "Códigos de salida mayores que 255, ¿es posible?" . Consultado el 28 de septiembre de 2009 .