stringtranslate.com

Estado de salida

En informática , el estado de salida (también código de salida o valor de salida ) de un proceso finalizado 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 lleva 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 llama proceso padre , mientras que los creados son procesos hijos . Los procesos hijos se ejecutan simultáneamente con el proceso padre. La técnica de generar procesos hijos se utiliza para delegar parte del trabajo a un proceso hijo cuando no hay ninguna razón para detener la ejecución del padre. Cuando el hijo termina de ejecutarse, sale llamando a la llamada del sistema exit . Esta llamada del sistema facilita la devolución del código de estado de salida al padre, que puede recuperar este valor utilizando la llamada del sistema wait .

Semántica

El padre y el hijo pueden entender 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 que la operación se realizó correctamente. Además de este valor de retorno del hijo, el proceso padre también puede tener acceso a otra información, como la forma en que salió el proceso, ya sea de manera normal 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 el programa puede indicar una causa específica del error. 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, que se evalúan mediante el operador or en conjunto para dar el valor final; por ejemplo, fsck hace esto.

A veces, si los códigos están diseñados con este propósito en mente, se pueden usar directamente como índice de rama al regresar al programa de inicio 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 termina con un estado de salida cero ha tenido éxito. Un estado de salida distinto de cero indica un error. Este esquema aparentemente contra-intuitivo se utiliza para que haya una forma bien definida de indicar el éxito y una variedad de formas de indicar varios modos de error. Cuando un comando finaliza con una señal cuyo número es N, un shell establece la variable $? en un valor mayor que 128. La mayoría de los shells utilizan 128+N, mientras que ksh93 utiliza 256+N.

Si no se encuentra un comando, el shell debe devolver un estado de 127. Si se encuentra un comando pero no es ejecutable, el estado de retorno debe ser 126. [2] Tenga en cuenta que este no es el caso de 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 devolviendo un entero o devolviendo las macros EXIT_SUCCESS y EXIT_FAILURE. En sistemas tipo Unix, estos son iguales a 0 y 1 respectivamente. [3] Un programa de AC también puede usar la exit()función que especifica el estado del 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 requerida ]

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 los códigos de retorno varían en las distintas plataformas (consulte las secciones específicas de cada plataforma).

Dos

En la terminología de DOS, un nivel de error es un código de salida entero devuelto por un programa ejecutable o una subrutina . Los niveles de error suelen oscilar entre 0 y 255. [4] [5] [6] [7] En DOS solo hay 256 códigos de error disponibles, pero DR DOS 6.0 y versiones superiores 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 programas por lotes suelen capturar los estados de salida mediante comandos IF ERRORLEVEL . [4] [6] El DOS multiusuario admite una variable de entorno reservada %ERRORLVL% que se actualiza automáticamente al regresar de las aplicaciones. COMMAND.COM en DR-DOS 7.02 y versiones posteriores admite una variable de entorno pseudo 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 a System.exit(int status), a menos que un administrador de seguridad no lo permita. Esto terminará la máquina virtual Java que se esté ejecutando. "El argumento sirve como un código de estado; por convención, un código de estado distinto de cero indica una terminación anormal". [8]

OpenVMS

En OpenVMS , el éxito se indica mediante valores impares y el fracaso mediante 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]

Plan 9

En C de Plan 9, el estado de salida se indica mediante una cadena que se pasa a la función exits , y la función main es de tipo void .

Sistema de archivos POSIX

En Unix y otros sistemas compatibles con POSIX , el proceso padre puede recuperar el estado de salida de un proceso hijo utilizando la wait()familia de llamadas del 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 estadoint de tipo empaquetado como un campo de bits con varios tipos de información de terminación del hijo. Si el hijo finalizó saliendo (según lo determinado por la WIFEXITED()macro; la alternativa habitual es que murió debido a una señal no capturada ), SUS especifica que los 8 bits de orden inferior del estado de salida se pueden recuperar del valor de estado utilizando la WEXITSTATUS()macro.

En la waitid()llamada del 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 del tipo siginfo_t. [13]

Los sistemas compatibles con POSIX suelen utilizar una convención de cero para éxito y un valor distinto de cero para 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 los 15 códigos de estado del 64 al 78 se definen en sysexits.h. [15] Estos históricamente derivan de sendmail y otros agentes de transferencia de mensajes , pero desde entonces se han utilizado en muchos otros programas. [16]

La Guía avanzada de scripts de 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 tuvieran signo. [20]

Los códigos de salida se referencian directamente, por ejemplo, mediante 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 ellos como ExitCodepropiedad del Processobjeto.

Véase 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". The Open Group . Consultado el 7 de julio de 2015 .
  3. ^ ab "Manual de referencia de la biblioteca C de GNU 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: ERRORLEVEL 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 provisto apunta a una versión anterior convertida a HTML del archivo BATTIPS.TXT). [3]
  5. ^ Auer, Eric; Paul, Matthias R.; Hall, Jim (2015-12-24) [2003-12-31]. "Niveles de error de MS-DOS". Archivado desde el original el 2015-12-24.
  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 exhaustivo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y elementos internos no documentados. El enlace proporcionado apunta a una versión convertida a HTML del archivo, que es 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". Sun Microsystems . 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, La especificación única de UNIX , versión 4 de The Open Group
  11. ^ waitid  – Referencia de interfaces del sistema, La especificación única de UNIX , versión 4 de The Open Group
  12. ^ wait  – Referencia de interfaces del sistema, La especificación única de UNIX , versión 4 de The Open Group
  13. ^ "2.4.3 Acciones de señalización". The Open Group . Consultado el 8 de febrero de 2019 .
  14. ^ "Capítulo 6. Salida y estado de salida". Faqs.org . Consultado el 9 de julio de 2012 .
  15. ^ sysexits(3) : códigos de salida preferibles para programas –  Manual de funciones de la biblioteca de FreeBSD
  16. ^ La búsqueda en Google de «"sysexits.h" site:github.com» arroja «Aproximadamente 3.540 resultados»; consultado el 21 de febrero de 2013.
  17. ^ "Códigos de salida con significados especiales".
  18. ^ "Función ExitProcess" . Consultado el 16 de diciembre de 2016 .
  19. ^ "Función GetExitCodeProcess" . Consultado el 22 de abril de 2022 .
  20. ^ "¿Es posible que los códigos de salida sean mayores que 255?" . Consultado el 28 de septiembre de 2009 .