Signals¶
Synopsis¶
kill [-s SIGNAL | -SIGNAL] PID…
kill -l [NUMBER | EXIT_STATUS]
pkill [-SIGNAL] [OPTIONS] PATTERN
killall [-s SIGNAL] NAME…
systemctl kill [--signal=SIGNAL] [--kill-whom=main|control|all] UNIT…
Description¶
A signal is an asynchronous notification sent to a process or thread, identified by a number and a name such as SIGTERM.
Each signal has a default action that applies unless the process has changed its disposition: ignore the signal, or catch it with a handler.
SIGKILL and SIGSTOP can't be caught, blocked or ignored.
Signal numbers are architecture-specific.
This page lists the values on x86-64 (and ARM and most other architectures); Alpha, SPARC, MIPS and PA-RISC number several signals differently.
Commands and scripts that name signals (kill -TERM, kill -s HUP) rather than numbering them work on every architecture.
The signal list was checked with Bash's kill -l and kill -L from procps-ng (Debian 13, Ubuntu 26.04, Gentoo) and util-linux (AlmaLinux 10, Rocky Linux 10, Arch Linux) on x86-64, and the default actions against signal(7) from man-pages 6.9.1 on Debian 13 (November 2026).
The background is explained in Processes and signals.
Default actions¶
| Action | Effect |
|---|---|
| Term | Terminate the process |
| Core | Terminate the process and write a core dump, if core dumps are enabled (ulimit -c, kernel.core_pattern) |
| Ign | Ignore the signal |
| Stop | Stop (suspend) the process |
| Cont | Continue the process if it is stopped |
Standard signals¶
| Number | Name | Default action | Typical source and use |
|---|---|---|---|
| 1 | SIGHUP |
Term | Terminal hang-up, or end of the controlling process. Many daemons reload their configuration or reopen log files on SIGHUP |
| 2 | SIGINT |
Term | Ctrl+C on a terminal |
| 3 | SIGQUIT |
Core | Ctrl+\ on a terminal; quit with a core dump |
| 4 | SIGILL |
Core | Illegal CPU instruction |
| 5 | SIGTRAP |
Core | Breakpoint or trace trap, used by debuggers |
| 6 | SIGABRT |
Core | abort(3), typically after a failed assertion; SIGIOT is a synonym |
| 7 | SIGBUS |
Core | Bus error: invalid memory access, such as touching a mapped file beyond its end |
| 8 | SIGFPE |
Core | Arithmetic error, such as integer division by zero |
| 9 | SIGKILL |
Term | Unconditional termination; can't be caught, blocked or ignored |
| 10 | SIGUSR1 |
Term | No predefined meaning; defined by each program |
| 11 | SIGSEGV |
Core | Invalid memory reference (segmentation fault) |
| 12 | SIGUSR2 |
Term | No predefined meaning; defined by each program |
| 13 | SIGPIPE |
Term | Write to a pipe or socket with no reader |
| 14 | SIGALRM |
Term | Timer set with alarm(2) or setitimer(2) expired |
| 15 | SIGTERM |
Term | Request to terminate; the default signal of kill, pkill and killall, and the first signal service managers send to stop a service |
| 16 | SIGSTKFLT |
Term | Coprocessor stack fault; unused on x86-64 |
| 17 | SIGCHLD |
Ign | A child process stopped, continued or terminated; SIGCLD is a synonym |
| 18 | SIGCONT |
Cont | Continue a stopped process; sent by fg and bg |
| 19 | SIGSTOP |
Stop | Unconditional stop; can't be caught, blocked or ignored |
| 20 | SIGTSTP |
Stop | Ctrl+Z on a terminal |
| 21 | SIGTTIN |
Stop | A background process read from its terminal |
| 22 | SIGTTOU |
Stop | A background process wrote to its terminal while stty tostop is set, or changed the terminal's settings |
| 23 | SIGURG |
Ign | Urgent (out-of-band) data on a socket |
| 24 | SIGXCPU |
Core | CPU time limit (ulimit -t, RLIMIT_CPU) exceeded |
| 25 | SIGXFSZ |
Core | File size limit (ulimit -f, RLIMIT_FSIZE) exceeded |
| 26 | SIGVTALRM |
Term | Virtual timer (setitimer(2), ITIMER_VIRTUAL) expired |
| 27 | SIGPROF |
Term | Profiling timer expired |
| 28 | SIGWINCH |
Ign | Terminal window size changed |
| 29 | SIGIO |
Term | I/O possible on a file descriptor set up for it; SIGPOLL is a synonym |
| 30 | SIGPWR |
Term | Power failure; sent by UPS software, handled by some init systems |
| 31 | SIGSYS |
Core | Bad system call, or a system call blocked by a seccomp filter |
Numbers 32 and 33 are real-time signals that the GNU C library reserves for its threads implementation, which is why kill -l doesn't list them.
Real-time signals¶
| Numbers | Names | Default action |
|---|---|---|
| 34 to 64 | SIGRTMIN to SIGRTMAX, also written SIGRTMIN+n and SIGRTMAX-n |
Term |
Real-time signals have no predefined meaning.
Unlike standard signals, multiple instances of the same real-time signal are queued, are delivered in order, and can carry a value (sigqueue(3)).
systemd uses several of them as commands to PID 1, listed in systemd(1).
Exit status after a signal¶
A shell reports a command killed by a signal as an exit status of 128 plus the signal number.
| Signal | Exit status |
|---|---|
SIGHUP (1) |
129 |
SIGINT (2) |
130 |
SIGQUIT (3) |
131 |
SIGABRT (6) |
134 |
SIGKILL (9) |
137 |
SIGSEGV (11) |
139 |
SIGPIPE (13) |
141 |
SIGTERM (15) |
143 |
Bash's kill -l converts an exit status back into a signal name:
Commands¶
| Command | Package | Selects processes by | Notes |
|---|---|---|---|
kill (Bash built-in) |
bash | PID, or job (%1) |
Used when you type kill in Bash; kill -l and kill -L list signals |
/usr/bin/kill |
procps-ng (Debian, Ubuntu, Gentoo), util-linux (RHEL, AlmaLinux, Rocky Linux, Arch Linux) | PID; the util-linux version also accepts process names | -L prints a table of numbers and names |
pkill, pgrep |
procps-ng | Name pattern, user (-u), exact name (-x), full command line (-f), parent (-P) |
pgrep lists the PIDs pkill would signal |
killall |
psmisc | Exact process name | psmisc is installed in all six lab cloud images; a minimal installation may lack it |
systemctl kill |
systemd | Unit | Signals the unit's main process or every process in its cgroup (--kill-whom=) |
rc-service <SERVICE> stop |
OpenRC | Service | Sends the service's stop signal following its retry schedule (default SIGTERM/5: SIGTERM, then wait up to 5 seconds) |
A PID of -1 sends the signal to every process the sender may signal, and a negative PID (kill -TERM -- -<PGID>) sends it to every process in that process group.
Signal 0 checks whether a process exists and can be signalled, without sending anything.
Examples¶
kill -TERM 1234 # ask process 1234 to terminate
kill -HUP "$(pgrep -o -x nginx)" # reload a daemon that handles SIGHUP
pkill -u alice -x sleep # terminate alice's processes named exactly "sleep"
kill -0 1234 && echo running # test whether process 1234 exists
Files¶
| Path | Purpose |
|---|---|
/proc/<PID>/status |
SigPnd, ShdPnd (pending), SigBlk (blocked), SigIgn (ignored) and SigCgt (caught) signal masks, as hexadecimal bit masks where bit n-1 is signal n |
/proc/sys/kernel/core_pattern |
Where and how core dumps for Core signals are written |
See also¶
signal(7),kill(2),sigaction(2),signalfd(2)(man-pages 6.9.1)kill(1)(procps-ng 4.0, or util-linux 2.40 to 2.42),pkill(1),bash(1)(killandtrapbuilt-ins)systemd.kill(5)forKillSignal=,KillMode=andTimeoutStopSec=openrc-run(8),start-stop-daemon(8)andsupervise-daemon(8)for OpenRC's stop signals and retry schedule
Related¶
- Explanation: Processes and signals
- Explanation: Control groups
- Explanation: Load average and memory
- Reference: Process information fields
- Reference: Common sysctl parameters
- How-to: How to find what is using CPU and memory
- How-to: How to limit a service's resources
- How-to: How to change kernel parameters persistently