Exit Codes

From Leo's Notes
Revision as of 23:09, 28 April 2021 by Leo (talk | contribs)
This page was last edited on 28 April 2021, at 23:09.

Here are some common exit codes that may be returned by a program or script.

Status Description
0 Successful Termination
1 General Error
2 Misuse of shell builtins, keywords, or functions
126 Cannot Execute
127 Command Not Found. Path or typo issue.
128+n Fatal error signal n, where n is the signal number as defined in:

https://man7.org/linux/man-pages/man7/signal.7.html

130 Program Interrupted (SIGINT, 2), such as termination from Ctrl-C
134 Program Abort (SIGABRT, 6)
136 Erroneous Arithmetic Operation (SIGFPE, 8), such as division by zero
139 Segmentation Fault (SIGSEGV, 11)
160+n The largest signal value is 31. As a result, all values after 128+31 can be interpreted as negative return codes by treating the value as a 1 byte integer.

For example, 255 = -1, 254 = -2, 240 = -16, 225 = -31, and so forth

A simple way to 'convert' it is to just subtract the value from 256.

255 Maximum exit code value. Obtained when the program calls exit -1.
256+ All higher exit codes should be reduced down to the 0-255 range. More information below.

Eg. Code 3809 % 256 results in 225

Parsing high exit code values

At least on Linux (and whatever is reported by Slurm), the exit code that's stored is an 2 byte value which can be parsed as:

Bits Description
high 8 bits The actual exit code
7 bit if a core dump was produced
lower 7 bits signal number that killed the process

For example, the exit code 32512 has an exit code of 127 (command not found).

See Also