Linux system errors
Linux System — 38 error codes
Reference list of 38 Linux system errors with meanings, common causes, and related context.
About Linux system errors
Linux system errors are reported through three mechanisms: process exit codes (0–255), POSIX signals, and errno constants defined in the C standard library. Exit code 0 means success; codes 1–2 indicate general or shell misuse errors; codes 126–128 and 128+n indicate permission issues or signal-based termination; and codes 130 and 137 specifically mean the process was killed by SIGINT (Ctrl+C) or SIGKILL (kill -9).
The errno constants (ENOMEM, EIO, EACCES, EAGAIN, and dozens more) provide finer-grained failure information than exit codes. Functions in the C library set errno when they fail, and higher-level tools and languages expose these values as error messages. Understanding both the exit code and the errno value is essential for diagnosing Linux process failures.
This collection documents 38 Linux system error codes and signals, covering both signal-based termination codes (exit 137 from SIGKILL, exit 139 from SIGSEGV) and errno-based failures (EIO, ENOMEM, EACCES). Each entry explains the signal or errno meaning, what triggers it, and how the kernel reports it to the parent process.
Showing 38 of 38 error codes
Process Killed — the process was terminated by a SIGKILL signal
Signal 11 (SIGSEGV) — kernel signal for invalid memory reference segmentation fault
Exit Code 139 — process terminated by segmentation fault (Signal 11 / SIGSEGV)
Input/output error EIO — a read or write operation could not complete
Out of Memory (ENOMEM) — the kernel cannot allocate the requested amount of memory
Illegal Instruction — the CPU reached an opcode it cannot decode or execute
Self-Abort — the process called abort() after detecting a state it cannot recover from
Bus Error — a memory access rejected at the hardware level, often around mmap'd files
No Space Left — the filesystem ran out of data blocks or of inodes
General Error — a non-specific failure in a command or script
Permission Denied — the process does not have permission to access the resource
Command Not Executable — the file was found but is not executable
Unspecified Error — a general-purpose failure code with no standardized meaning
Quit Signal — a Ctrl+\ interrupt that terminates the process and leaves a core dump
Arithmetic Fault — an integer division by zero or similar math trap, despite the name
Broken Pipe — the process wrote into a pipe whose reader is already gone
Bad File Descriptor — the descriptor number is not open in this process's table
Bad Address — the kernel could not reach the user-space buffer a syscall pointed at
Resource Busy — the target exists, but another holder refuses to release it right now
No Such Device — the operation targets hardware or a driver that is not present
Invalid Argument — a syscall received a malformed or self-contradictory parameter
Too Many Open Files — the process hit its per-process descriptor ceiling
Read-Only Filesystem — the mount itself refuses writes, so permission changes cannot help
Broken Pipe — a write failed because the pipe's read end had already closed
Shell Misuse — improper use of shell built-ins or syntax
Exit Code 127 — shell command or executable binary not found
Terminated by User — the process was interrupted by a SIGINT signal
Invalid Exit Argument — script exited with an out-of-range status or terminated by a signal
Connection Hangup — the controlling terminal closed; daemons repurpose it as a config-reload trigger
Trace Trap — a breakpoint or trap instruction fired, normally under a debugger's control
User Signal 1 — an application-defined control channel rather than an error state
User Signal 2 — the second application-defined channel, with a meaning set per program
Timer Expired — an alarm() deadline the process set for itself has run out
Termination Request — a polite shutdown signal the process may handle before exiting
Interrupted Call — a signal arrived mid-operation; the call stopped and can simply be retried
File Exists — a create-with-exclusivity request collided with a name that is already there
Not a Directory — a path walks through a component that is an ordinary file
Is a Directory — a file-level write or open was aimed at a directory
Frequently Asked Questions
Exit codes 128 and above typically indicate the process was terminated by a signal. The signal number is the exit code minus 128. For example, exit code 137 = 128 + 9 (SIGKILL), and exit code 139 = 128 + 11 (SIGSEGV).
Exit code 1 is a general-purpose error used by most programs for non-specific failures. Exit code 2 traditionally indicates a shell misuse error, such as invalid syntax in a bash script or a missing builtin. Many programs use both interchangeably.
Exit code 137 conventionally indicates that a process was terminated with SIGKILL (signal 9). One common context is the Linux OOM killer ending a process after it exceeds an available memory limit.