---
name: "sysexits"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["freebsd", "macos"]
url: "https://new.carta.tech/sysexits"
---

# sysexits(3)

preferable exit codes for programs

## NAME

**sysexits** – preferable exit codes for programs

## SYNOPSIS

**#include \<sysexits.h\>**

## DESCRIPTION

According to [style(9)](/style/9.md), it is not a good practice to call [exit(3)](/exit/3.md) with arbitrary values to indicate a failure condition when ending a program.  Instead, the pre-defined exit codes from **sysexits** should be used, so the caller of the process can get a rough estimation about the failure class without looking up the source code.

The successful exit is always indicated by a status of 0, or **EX\_OK**. Error numbers begin at **EX\_\_BASE** to reduce the possibility of clashing with other exit statuses that random programs may already return.  The meaning of the codes is approximately as follows:

- **EX\_USAGE** (64)

  The command was used incorrectly, e.g., with the wrong number of arguments, a bad flag, a bad syntax in a parameter, or whatever.

- **EX\_DATAERR** (65)

  The input data was incorrect in some way.  This should only be used for user's data and not system files.

- **EX\_NOINPUT** (66)

  An input file (not a system file) did not exist or was not readable. This could also include errors like “No message” to a mailer (if it cared to catch it).

- **EX\_NOUSER** (67)

  The user specified did not exist.  This might be used for mail addresses or remote logins.

- **EX\_NOHOST** (68)

  The host specified did not exist.  This is used in mail addresses or network requests.

- **EX\_UNAVAILABLE** (69)

  A service is unavailable.  This can occur if a support program or file does not exist.  This can also be used as a catchall message when something you wanted to do doesn't work, but you don't know why.

- **EX\_SOFTWARE** (70)

  An internal software error has been detected.  This should be limited to non-operating system related errors as possible.

- **EX\_OSERR** (71)

  An operating system error has been detected.  This is intended to be used for such things as “cannot fork”, “cannot create pipe”, or the like.  It includes things like getuid returning a user that does not exist in the passwd file.

- **EX\_OSFILE** (72)

  Some system file (e.g., */etc/passwd*, */var/run/utmp*, etc.) does not exist, cannot be opened, or has some sort of error (e.g., syntax error).

- **EX\_CANTCREAT** (73)

  A (user specified) output file cannot be created.

- **EX\_IOERR** (74)

  An error occurred while doing I/O on some file.

- **EX\_TEMPFAIL** (75)

  Temporary failure, indicating something that is not really an error. In sendmail, this means that a mailer (e.g.) could not create a connection, and the request should be reattempted later.

- **EX\_PROTOCOL** (76)

  The remote system returned something that was “not possible” during a protocol exchange.

- **EX\_NOPERM** (77)

  You did not have sufficient permission to perform the operation.  This is not intended for file system problems, which should use **EX\_NOINPUT** or **EX\_CANTCREAT**, but rather for higher level permissions.

- **EX\_CONFIG** (78)

  Something was found in an unconfigured or misconfigured state.

The numerical values corresponding to the symbolical ones are given in parenthesis for easy reference.

## SEE ALSO

[exit(3)](/exit/3.md), [style(9)](/style/9.md)

## HISTORY

The **sysexits** file appeared somewhere after 4.3BSD.

## AUTHORS

This man page has been written by Jörg Wunsch after the comments in ⟨sysexits.h⟩.

## BUGS

The choice of an appropriate exit value is often ambiguous.
