In
computing
Computing is any goal-oriented activity requiring, benefiting from, or creating computer, computing machinery. It includes the study and experimentation of algorithmic processes, and the development of both computer hardware, hardware and softw ...
, the exit status (also exit code or exit value) of a terminated
process
A process is a series or set of activities that interact to produce a result; it may occur once-only or be recurrent or periodic.
Things called a process include:
Business and management
* Business process, activities that produce a specific s ...
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
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
creates an
abstract entity called a
process
A process is a series or set of activities that interact to produce a result; it may occur once-only or be recurrent or periodic.
Things called a process include:
Business and management
* Business process, activities that produce a specific s ...
in which the book-keeping for that program is maintained. In multitasking operating systems such as
Unix or
Linux
Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
, 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
''exit'' system 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
A signal is both the process and the result of transmission of data over some media accomplished by embedding some variation. Signals are important in multiple subject fields including signal processing, information theory and biology.
In ...
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.
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
AmigaOS is a family of proprietary native operating systems of the Amiga and AmigaOne personal computers. It was developed first by Commodore International and introduced with the launch of the first Amiga, the Amiga 1000, in 1985. Early versions ...
,
MorphOS and
AROS, four levels are defined:
* OK 0
* WARN 5
* ERROR 10
* FAILURE 20
Shell and scripts
Shell scripts typically execute commands and capture their exit statuses.
For the shell's purposes, a command which exits with a zero exit status has succeeded. A nonzero exit status indicates failure. This seemingly counter-intuitive scheme is used so there is one well-defined way to indicate success and a variety of ways to indicate various failure modes. When a command is terminated by a signal whose number is N, a shell sets the variable $? to a value greater than 128. Most shells use 128+N, while ksh93 uses 256+N.
If a command is not found, the shell should return a status of 127. If a command is found but is not executable, the return status should be 126.
Note that this is not the case for all shells.
If a command fails because of an error during expansion or redirection, the exit status is greater than zero.
C language
The
C programming language allows programs exiting or returning from the
main function to signal success or failure by returning an integer, or returning the
macros EXIT_SUCCESS
and
EXIT_FAILURE
. On Unix-like systems these are equal to 0 and 1 respectively.
A C program may also use the
exit()
function specifying the integer status or exit macro as the first parameter.
The return value from
main
is passed to the
exit
function, which for values zero,
EXIT_SUCCESS
or
EXIT_FAILURE
may translate it to "an implementation defined form" of ''successful termination'' or ''unsuccessful termination''.
Apart from zero and the macros
EXIT_SUCCESS
and
EXIT_FAILURE
, the C standard does not define the meaning of return codes. Rules for the use of return codes vary on different platforms (see the platform-specific sections).
DOS
In DOS terminology, an errorlevel is an
integer
An integer is the number zero (0), a positive natural number (1, 2, 3, ...), or the negation of a positive natural number (−1, −2, −3, ...). The negations or additive inverses of the positive natural numbers are referred to as negative in ...
exit
code
In communications and information processing, code is a system of rules to convert information—such as a letter, word, sound, image, or gesture—into another form, sometimes shortened or secret, for communication through a communicati ...
returned by an
executable program or
subroutine. Errorlevels typically range from 0 to 255.
In
DOS there are only 256 error codes available, but
DR DOS 6.0 and higher support 16-bit error codes at least in
CONFIG.SYS.
With
4DOS and DR-DOS
COMMAND.COM, exit codes (in batchjobs) can be set by
EXIT ''n'' and (in CONFIG.SYS) through
ERROR=''n''.
Exit statuses are often captured by
batch programs through
IF ERRORLEVEL commands.
Multiuser DOS supports a reserved
environment variable
An environment variable is a user-definable value that can affect the way running processes will behave on a computer. Environment variables are part of the environment in which a process runs. For example, a running process can query the va ...
%ERRORLVL% which gets automatically updated on return from applications. COMMAND.COM under
DR-DOS 7.02 and higher supports a similar
pseudo-environment variable %ERRORLVL% as well as
%ERRORLEVEL%. In CONFIG.SYS, DR DOS 6.0 and higher supports
ONERROR to test the load status and return code of device drivers and the exit code of programs.
Java
In Java, any method can call
System.exit(int status)
, unless a security manager does not permit it. This will terminate the currently running Java Virtual Machine. "The argument serves as a status code; by convention, a nonzero status code indicates abnormal termination."
OpenVMS
In
OpenVMS, success is indicated by odd values and failure by even values. The value is a 32-bit integer with sub-fields: control bits, facility number, message number and severity. Severity values are divided between success (Success, Informational) and failure (Warning, Error, Fatal).
Plan 9
In Plan 9's C, exit status is indicated by a string passed to the ''exits'' function, and
function main is
type void.
POSIX
In
Unix and other
POSIX-compatible systems, the parent process can retrieve the exit status of a child process using the
wait()
family of system calls defined in
wait.h.
Of these, the
waitid()
call retrieves the full exit status, but the older
wait()
and
waitpid()
calls retrieve only the least significant 8 bits of the exit status.
The
wait()
and
waitpid()
interfaces set a ''status'' value of type
int
packed as a
bitfield with various types of child termination information. If the child terminated by exiting (as determined by the
WIFEXITED()
macro; the usual alternative being that it died from an uncaught
signal
A signal is both the process and the result of transmission of data over some media accomplished by embedding some variation. Signals are important in multiple subject fields including signal processing, information theory and biology.
In ...
),
SUS specifies that the low-order 8 bits of the exit status can be retrieved from the status value using the
WEXITSTATUS()
macro.
In the
waitid()
system call (added with SUSv1), the child exit status and other information are no longer in a bitfield but in the structure of type
siginfo_t
.
POSIX-compatible systems typically use a convention of zero for success and nonzero for error.
Some conventions have developed as to the relative meanings of various error codes; for example GNU recommend that codes with the high bit set be reserved for serious errors.
BSD-derived OS's have defined an extensive set of preferred interpretations: Meanings for 15 status codes 64 through 78 are defined in
sysexits.h.
These historically derive from
sendmail and other
message transfer agents, but they have since found use in many other programs.
It has been deprecated and its use is discouraged.
The Advanced Bash-Scripting Guide has some information on the meaning of non-0 exit status codes.
Windows
Microsoft Windows
Windows is a Product lining, product line of Proprietary software, proprietary graphical user interface, graphical operating systems developed and marketed by Microsoft. It is grouped into families and subfamilies that cater to particular sec ...
uses 32-bit unsigned integers as exit codes,
although the command interpreter treats them as signed.
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
*
Error code
*
Return statement
*
true and false (commands)
References
{{DEFAULTSORT:Exit Status
Process (computing)