kill command is a command line utility to for terminating processes. It is normally a shell builtin meaning the command is called from a users shell rather than an external executable program. By default the
kill command will send a
TERM signal to a process allowing the process to perform any cleanup operations before shutting down. The kill command also supports sending any other signal to a process. The kill command is used primarily to terminate or restart processes.
To kill, or terminate a process first find out the process identifier number or PID of the process to be killed, then pass the PID number to the kill command. In the following example suppose that we are running the
mutt terminal email program and that we wish to terminate it. To find the process identifier the
ps command is used along with
grep to find the PID.
ps -e | grep mutt 17146 pts/1 00:00:00 mutt
The same may also be achieved by running the
pgrep command. This will return the process identifier or identifiers for the search pattern.
pgrep mutt 17146
Once the PID for the mutt program is known it may be used with the
This sends a
TERM signal to the process indicating it should be terminated. When a process receives a
TERM it acts as a request to terminate the running process. A UNIX process may catch a
TERM and handle termination gracefully such as releasing resources or saving state.
It is also possible to use
pkill to achieve the same result.
If a signal does not respond to a
TERM signal the
KILL signal may be used. The
KILL signal cannot be ignored by UNIX processes and the process is killed immediately. Note that this does not allow the process to perform any cleanup when shutting down the process. To send a process a signal other than
TERM use the
-s option followed by the name of the signal.
kill -s KILL 17146
Using the signal number is more commonly used and is equivalent.
kill -s 9 17146
Some shell built-ins also support the following syntax for even more brevity.
kill -9 17146
To view signal names and numbers pass the
-L option to the
kill -L 1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 6 IOT 7 BUS 8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM 15 TERM 16 STKFLT 17 CHLD 17 CLD 18 CONT 19 STOP 20 TSTP 21 TTIN 22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH 29 IO 29 POLL 30 PWR 31 UNUSED 31 SYS 34 RTMIN 64 RTMAX
To just list the names of signals use the
kill -l HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
Any of these signals may be sent to a process using either the number or name of a signal. The following are equivalent ways to send a process a
kill -s HUP 17146 kill -s 1 17146 kill -HUP 17146 kill -1 17146
To kill a process a user account must have sufficient permissions. If, for example, a normal user account tries to kill a process owned by root an error will be shown. In the following example the process
6425 is owned by root.
kill 6245 kill: sending signal to 6245 failed: Operation not permitted
If the user account has sudo permissions the account can simultaneously be elevated and run the command with the following.
If a user account does not have sudo permssions a systems administrator will need to assign higher permissions to achieve this.
To enable verbose logging pass the
--verbose flag to the
kill command. Note that this is not supported by all shell built-ins so may not be available on your system.
kill --verbose 17146 sending signal 15 to pid 17146
The number relates to the signal mapped in the table of available signals available via
kill -L. In this case it is the
Have an update or suggestion for this article? You can edit it here and send me a pull request.
Build your own Vim statusline
Statuslines in Vim are not hard to create. Making your own means one less dependency in your life.
Custom Vim Bindings in tmux 2.4
tmux 2.4 made a significant change to key bindings. Here is how to support custom keybindings for versions before and after tmux 2.4
Using template files in Vim
Vim templates or skeletons, allow you to specify a template to be used for new files with a certain extension.