Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

  1. Home
  2. Bash Dictionary
  3. kill / pkill / killall

kill / pkill / killall

kill sends a signal to a process specified by its process ID (PID). pkill sends a signal by process name, and killall sends a signal to all processes whose name matches exactly. These commands are used to stop, restart, or reload the configuration of processes.

Syntax

Use kill to send a signal by specifying a PID.

kill PID
kill -signal_name PID
kill -signal_number PID

Use pkill to search by process name and send a signal.

pkill process_name
pkill -signal process_name
pkill -u username process_name

Use killall to send a signal to all processes with an exactly matching name.

killall process_name
killall -signal process_name

List available signals.

kill -l

Common Signals

SignalNumberDescription
SIGTERM15Requests graceful termination (default). The process can clean up before exiting.
SIGKILL9Forces immediate termination. The process cannot ignore this signal and exits without cleanup.
SIGINT2Interrupt signal, equivalent to pressing Ctrl+C.
SIGHUP1Hangup signal. Many daemons use this to reload their configuration files.
SIGSTOP19Pauses a process (cannot be ignored).
SIGCONT18Resumes a stopped process.
SIGUSR1/210/12User-defined signals for application-specific handling.

Sample Code

The following examples assume that sleep 1000 is running with PID 12345.

ps aux | grep "sleep" | grep -v grep
alice  12345  0.0  0.0  5536  1024 pts/0  S  10:00  0:00 sleep 1000

Request graceful termination with SIGTERM. When no signal is specified, the default SIGTERM (15) is sent.

kill 12345

Use SIGKILL (-9) to force-terminate an unresponsive process. The process stops immediately without any cleanup.

kill -9 12345
kill -SIGKILL 12345   # same effect

Send SIGHUP to nginx to reload its configuration file. Most daemons reload their config when they receive this signal.

kill -HUP $(cat /var/run/nginx.pid)

Use pkill to stop a process by name, saving you the trouble of looking up its PID.

pkill sleep          # send SIGTERM to processes whose name contains "sleep"
pkill -9 myapp       # force-terminate
pkill -u www-data php-fpm   # stop a process owned by a specific user

killall sends a signal to all processes whose name matches exactly.

killall nginx

Use kill -0 to check whether a process exists without sending an actual signal. This is useful for monitoring processes in scripts.

check_process.sh
kill 12345 && echo "Signal sent successfully"
sleep 1
if ! kill -0 12345 2>/dev/null; then
    echo "Process has terminated"
fi
bash check_process.sh
Signal sent successfully
Process has terminated

Example of capturing a background process PID and stopping it.

kill_bg.sh
sleep 100 &
bg_pid=$!
echo "Background PID: $bg_pid"
kill "$bg_pid"
echo "Stop signal sent"
bash kill_bg.sh
Background PID: 12348
Stop signal sent

Notes

The recommended practice is to first send SIGTERM (-15) to give the process a chance to exit gracefully, and only use SIGKILL (-9) if the process does not terminate. SIGKILL skips flushing open files and releasing resources, which can result in data corruption.

$ kill -0 PID only checks whether the process exists without sending any signal (exit status 0 = exists, non-zero = does not exist). This is useful for process monitoring in scripts.

To inspect processes, see ps / top / htop. For running processes in the background, see & (background execution).

If you find any errors or copyright issues, please .