When a command is finished running, it returns a status of whether it was successful or not.
An exit status is an integer between 0 and 255 returned when a program exits.
Usually readable by running:
echo $?
NOTE: This is in effect one of the key pieces of the API which shells use to communicate with the programs that they run.
When a program receives a fatal signal, it will exit with a code of 128 + n where n is the signal code.
For example, for a program sent signal 2 (SIGINT, or more commonly thought of as Ctrl+C):
curl -n https://api.heroku.com/apps ^C echo $? 130
The Advanced Bash-script Guide lists a number of other reserved exit codes.
Some attempt at standardization has also been made in the kernel header sysexits.h:
#define EX_OK 0 /* successful termination */ #define EX__BASE 64 /* base value for error messages */ #define EX_USAGE 64 /* command line usage error */ #define EX_DATAERR 65 /* data format error */ #define EX_NOINPUT 66 /* cannot open input */ #define EX_NOUSER 67 /* addressee unknown */ #define EX_NOHOST 68 /* host name unknown */ #define EX_UNAVAILABLE 69 /* service unavailable */ #define EX_SOFTWARE 70 /* internal software error */ #define EX_OSERR 71 /* system error (e.g., can't fork) */ #define EX_OSFILE 72 /* critical OS file missing */ #define EX_CANTCREAT 73 /* can't create (user) output file */ #define EX_IOERR 74 /* input/output error */ #define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ #define EX_PROTOCOL 76 /* remote error in protocol */ #define EX_NOPERM 77 /* permission denied */ #define EX_CONFIG 78 /* configuration error */ #define EX__MAX 78 /* maximum listed value */