Articulo de referencia

Exit status

In computing , the exit status (also exit code or exit value ) of a terminated process is an integer number that is made available to its parent process (or caller). In DOS , th...

In computing, the exit status (also exit code or exit value) of a terminated process is an integer number that is made available to its parent process (or caller). In DOS, this may be referred to as an errorlevel.

When computer programs are executed, the operating system creates an abstract entity called a process in which the book-keeping for that program is maintained. In multitasking operating systems such as Unix or Linux, new processes can be created by active processes. The process that spawns another is called a parent process, while those created are child processes. Child processes run concurrently with the parent process. The technique of spawning child processes is used to delegate some work to a child process when there is no reason to stop the execution of the parent. When the child finishes executing, it exits by calling the exitsystem call. This system call facilitates passing the exit status code back to the parent, which can retrieve this value using the wait system call.

Semantics

The parent and the child can have an understanding about the meaning of the exit statuses. For example, it is common programming practice for a child process to return (exit with) zero to the parent signifying success. Apart from this return value from the child, other information like how the process exited, either normally or by a signal may also be available to the parent process.

The specific set of codes returned is unique to the program that sets it. Typically it indicates success or failure. The value of the code returned by the function or program may indicate a specific cause of failure. On many systems, the higher the value, the more severe the cause of the error.[1] Alternatively, each bit may indicate a different condition, with these being evaluated by the or operator together to give the final value; for example, fsck does this.

Sometimes, if the codes are designed with this purpose in mind, they can be used directly as a branch index upon return to the initiating program to avoid additional tests.

AmigaOS

In AmigaOS, MorphOS and AROS, four levels are defined:

  1. OK 0
  2. WARN 5
  3. ERROR 10
  4. FAILURE 20

Shell and scripts

Shell scripts typically execute commands and capture their exit statuses.

Para los propósitos del intérprete de comandos, un comando que finaliza con un código de salida cero se considera exitoso. Un código de salida distinto de cero indica un fallo. Este esquema, aparentemente contraintuitivo, se utiliza para que exista una forma bien definida de indicar el éxito y diversas formas de indicar los distintos modos de fallo. Cuando un comando finaliza con una señal cuyo número es N, el intérprete de comandos establece la variable $?a un valor mayor que 128. La mayoría de los intérpretes de comandos utilizan 128+N , mientras que ksh93 utiliza 256+N .

Si no se encuentra un comando, el intérprete de comandos 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 esto no se aplica a todos los intérpretes de comandos.

Si un comando falla debido a un error durante la expansión o la redirección, el estado de salida es mayor que cero.

C y C++

Los lenguajes de programación C y C++ permiten que los programas que salen o regresan de la función principal indiquen éxito o fracaso devolviendo un entero, o devolviendo las macrosEXIT_SUCCESS y EXIT_FAILURE. En sistemas tipo Unix, estas son iguales a 0y 1respectivamente. [ 3 ] El programa AC también puede usar la exit()función especificando el estado entero o la macro de salida como primer parámetro, lo que detiene el programa.

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 .

Aparte de 0las 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 cada plataforma).

DO#

En C# , el Main()método normalmente no devuelve un tipo (su tipo es void, o si async, es System.Threading.Tasks.Task). Sin embargo, Main()puede indicar un tipo de retorno, de tipo int, que se devuelve al sistema operativo. Si el Main()método se declara async, entonces en su lugar devuelve . [ 4 ]System.Threading.Tasks.Task<int>

DOS

En la terminología de DOS, un nivel de error es un código de salida entero devuelto por un programa ejecutable o subrutina . Los niveles de error suelen ir de 0 a 255. [ 5 ] [ 6 ] [ 7 ] [ 8 ] En DOS solo 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 . [ 7 ] Con 4DOS y DR-DOS COMMAND.COM , los códigos de salida (en trabajos por lotes) se pueden establecer mediante EXIT n [ 7 ] y (en CONFIG.SYS ) mediante ERROR= n . [ 7 ]

Los estados de salida suelen ser capturados por programas por lotes mediante comandos IF ERRORLEVEL . [ 5 ] [ 7 ] Multiuser DOS 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. [ 7 ] 

Java

En Java , el main()no indica un código de salida, por lo que, si es necesario, se especifica manualmente un código de salida a través de java.lang.System::exit(), lo que finaliza el programa y la JVM. Cualquier método puede llamar a System.exit(), a menos que un administrador de seguridad no lo permita. El argumento sirve como código de estado; por convención, un código de estado distinto de cero indica una terminación anormal. [ 9 ]

OpenVMS

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). [ 10 ]

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 .

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 al sistema definidas en el encabezado POSIX<wait.h> . [ 11 ] De estas, la llamada waitid()[ 12 ] recupera el estado de salida completo, pero las llamadas más antiguas wait()y waitpid()[ 13 ] recuperan solo los 8 bits menos significativos del estado de salida.

Las wait()interfaces waitpid()establecen un valor de estado de tipo intempaquetado como un campo de bits con varios tipos de información de terminación del hijo. Si el hijo terminó al salir (según lo determine la WIFEXITED()macro; la alternativa habitual es que murió por 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 usando la WEXITSTATUS()macro.

En la waitid()llamada al sistema (añadida con SUSv1), el estado de salida del hijo y otra información ya no están en un campo de bits sino en la estructura de tipo siginfo_t. [ 14 ]

Los sistemas compatibles con POSIX suelen usar la convención de cero para éxito y distinto de cero para error. [ 15 ] Se han desarrollado algunas convenciones sobre los significados relativos de varios códigos de error; por ejemplo, GNU recomienda que los códigos con el bit más significativo activado se reserven para errores graves. [ 3 ]

Los sistemas operativos derivados de BSD han definido un extenso conjunto de interpretaciones preferidas: los significados para 15 códigos de estado del 64 al 78 están definidos en el encabezado POSIX <sysexits.h>. [ 16 ] Históricamente, estos se derivan de sendmail y otros agentes de transferencia de mensajes , pero desde entonces se han utilizado en muchos otros programas. [ 17 ] Se ha descontinuado y se desaconseja su uso. [ 16 ]

La Guía avanzada de scripting de Bash contiene información sobre el significado de los códigos de estado de salida distintos de 0. [ 18 ]

Óxido

En Rust , main()puede devolver cualquier tipo que implemente el rasgo std::process::Termination. [ 19 ]

Internamente, en el entorno de ejecución de Rust, estos valores se devolverán libc::EXIT_SUCCESStanto en caso de ejecución exitosa como libc::EXIT_FAILUREen caso de fallo.

En la biblioteca estándar de Rust, los siguientes tipos tienen implementaciones para std::process::Termination:

  • !(el tipo nunca )
  • ()(el tipo de unidad )
  • std::convert::Infallible
  • std::process::ExitCode(con constantes SUCCESSy FAIL)
  • std::result::Result<T, E>

VM/CMS

[20]

Windows

Microsoft Windows uses 32-bit unsigned integers as exit codes,[21][22] although the command interpreter treats them as signed.[23]

Exit codes are directly referenced, for example, by the command line interpreter CMD.exe in the errorlevel terminology inherited from DOS. The .NET Framework processes and the Windows PowerShell refer to it as the ExitCode property of the Process object.

See also

References

  1. "Errorlevels". Rob van der Woude's Scripting Pages. Retrieved 2007-08-26.
  2. "Shell command language - Exit Status for commands". The Open Group. Retrieved 2015-07-07.
  3. 12"The GNU C Library Reference Manual 25.6.2: Exit Status". Gnu.org. Retrieved 2012-07-09.
  4. Microsoft Learn (2026-03-20). "Main() and command-line arguments". learn.microsoft.com. Microsoft Learn.
  5. 12Paul, Matthias R. (1997-05-01) [1993-10-01]. BATTIPs — Tips & Tricks zur Programmierung von Batchjobs (in German). 7: ERRORLEVEL abfragen. Archived from the original on 2017-08-23. Retrieved 2017-08-23.{{cite book}}: |work= ignored (help)Deprecated link archived 2017-09-11 at archive.today (NB. BATTIPS.TXT is part of MPDOSTIP.ZIP. The provided link points to a HTML-converted older version of the BATTIPS.TXT file.)
  6. Auer, Eric; Paul, Matthias R.; Hall, Jim (2015-12-24) [2003-12-31]. "MS-DOS errorlevels". Archived from the original on 2015-12-24.
  7. 123456Paul, Matthias R. (1997-07-30) [1994-05-01]. NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. Release 157 (in German) (3 ed.). Archived from the original on 2016-11-04. Retrieved 2014-08-06.{{cite book}}: |work= ignored (help) (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. The provided link points to a HTML-converted version of the file, which is part of the MPDOSTIP.ZIP collection.)
  8. Allen, William; Allen, Linda. "Windows 95/98/ME ERRORLEVELs". Archived from the original on 2011-07-07.
  9. "Java 1.6.0 API". Sun Microsystems. Retrieved 2008-05-06.
  10. "OpenVMS Format of Return Status Values". H71000.www7.hp.com. Archived from the original on 2012-03-19. Retrieved 2012-07-09.
  11. sys_wait.h  Base Definitions Reference, The Single UNIX Specification, Version 5 from The Open Group
  12. waitid  System Interfaces Reference, The Single UNIX Specification, Version 5 from The Open Group
  13. wait  System Interfaces Reference, The Single UNIX Specification, Version 5 from The Open Group
  14. "2.4.3 Signal Actions". The Open Group. Retrieved 2019-02-08.
  15. "Chapter 6. Exit and Exit Status". Faqs.org. Retrieved 2012-07-09.
  16. 12sysexits(3): preferable exit codes for programs  FreeBSD Library Functions Manual
  17. Google search for «"sysexits.h" site:github.com» reports «About 3,540 results»; retrieved 2013-02-21.
  18. "Exit Codes with Special Meanings".
  19. The Rust Team (2026-05-25). "Termination in std::process". doc.rust-lang.org. The Rust Team.
  20. "Return Codes". www.ibm.com. Retrieved 2026-03-27.
  21. "ExitProcess function". Retrieved 2016-12-16.
  22. "GetExitCodeProcess function". Retrieved 2022-04-22.
  23. "ExitCodes bigger than 255, possible?". Retrieved 2009-09-28.