What Options you use for Linux killall Command ? I have 5 Options

March 14, 2014 | By
| 2 Replies More

Linux command line offers various commands to kill a process. For example, the 'kill' command can be used to kill a process by passing its PID as an argument, the 'pkill' command takes a pattern as an input and all the matching running processes are killed. But there exists a command 'killall', which exactly matches the argument name by default, and kills the matching process. In this article, we will discuss this command with some practical examples.

killall command

Linux killall Command

The killall command can be used to send a signal to a particular process. The signal can be specified as an argument to this command or else SIGTERM is sent by default.

Lets discuss the usage of this command through some practical examples.

1. A basic example

In this example, we will show how killall command can be used to kill a particular process. Suppose, there are two processes that have same initial characters :

$ ps -aef | grep "test"
himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test
himanshu 3970 2811 0 14:14 pts/0 00:00:00 ./test_again

Now, here is how you can use the killall command to kill 'test_again' :

$ killall test_again
[2]+ Terminated ./test_again

As you can see, the 'killall' command terminated the 'test_again' process. This can also be confirmed through the ps command :

$ ps -aef | grep "test"
himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test

Observe that 'test_again' is not displayed in the output as it is killed.

2. Ignore case using -I option

The killall command is case-sensitive by default. Here is an example :

$ ps -aef | grep "test"
himanshu 4177 3161 0 14:54 pts/3 00:00:00 ./test
himanshu 4178 3161 0 14:54 pts/3 00:00:00 ./test_again
himanshu 4180 3161 0 14:54 pts/3 00:00:00 grep --color=auto test

$ killall TEST
TEST: no process found

So you can see that the killall command could not find any process named TEST, while a process named 'test' is already running.

To make sure that the killall command ignores the case, use the -I option. Here is an example :

$ killall -I TEST
[1]- Terminated ./test

Observe that now it successfully terminated the 'test' process.

3. Kill processes interactively using -i option

The killall command can be used to kill more than process.

$ killall test test_again
[2]- Terminated ./test_again
[3]+ Terminated ./test

But, if you want killall to terminate processes interactively, you can use the -i option.

Here is an example :

$ killall -i test test_again
Kill test(4201) ? (y/N) y
Kill test_again(4202) ? (y/N) y
[1]- Terminated ./test
[2]+ Terminated ./test_again

So you can see that this way user can control the termination of processes using killall command.

4. Disable details if no processes were killed using -q option

Sometimes when killall is not able to find a specified process, it complains about the same in the output.

Here is an example :

$ killall TEST
TEST: no process found

But, in case you want killall to carry out its work quietly, you can use the -q option :

$ killall -q TEST
$

So you can see that when -q was used, the output was suppressed.

5. List all the supported signals in output using -l option

As already described in the beginning, killall sends signals to processes. You can use the -s option (followed by the signal name) to send a particular signal to a process.

To know, what all signals this command can send, use the -l option.

$ killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

So killall supports all these signals.

Something to discuss

The man page of the killall command says that by default, it matches complete names only if they are less than or equal to 15 characters in length.

For example, suppose there are following two processes with long names :

$ ps -aef | grep "test"
himanshu 4021 3161 0 14:27 pts/3 00:00:00 ./test_abcdefghij
himanshu 4035 3161 0 14:27 pts/3 00:00:00 ./test_abcdefgh

The first process in the output above has exactly 15 characters in name. Lets try to kill it using the killall command :

$ killall test_abcdefghij
[1]- Terminated ./test_abcdefghij

So you can see that the killall command kills the process successfully.

Now, according to the man page, if both the names would have had more than 15 matching characters, killall would have killed both the processes. Here is an example :

$ ps -aef | grep "test"
himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
himanshu 4141 3161 0 14:46 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwxyz
himanshu 4143 3161 0 14:46 pts/3 00:00:00 grep --color=auto test

Observe that both the processes now have more than 15 matching characters in their name. Now, when I tried to kill the second process using killall :

$ killall test_abcdefghijklmnopqrstuvwxyz
[6]+ Terminated ./test_abcdefghijklmnopqrstuvwxyz

It killed only the specified process, and not the other one.

$ ps -aef | grep "test"
himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
himanshu 4146 3161 0 14:47 pts/3 00:00:00 grep --color=auto test

I am not sure if there is something incorrect on my side, or it is a bug in killall command. I'd appreciate if you put forward your views on this in comments.

BTW, here are the details of killall command on my system :

$ killall --version
killall (PSmisc) 22.20
Copyright (C) 1993-2012 Werner Almesberger and Craig Small

PSmisc comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under
the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.

Filed Under : LINUX COMMANDS, LINUX HOWTO

Free Linux Ebook to Download

Comments (2)

Trackback URL | Comments RSS Feed

  1. Chris Guiver says:

    Never noticed any problems or issues with killall; but than I generally only use it to kill 'chrom*' when it hangs or I recognize its endlessly malloc()ing memory (ie. soon to dead-jim when it runs eventually runs out of ram & swap space).

  2. Leo Zhai says:

    Because we defined the macro NAME_LEN like this:
    #define NAME_LEN 14 (Linux Kernel 0.11)
    But now it is char[256].
    So you can see that the killall command kills the process successfully.

Leave a Reply

Commenting Policy:
Promotion of your products ? Comment gets deleted.
All comments are subject to moderation.