Userspace programs for process management on Linux


Despite its name (that it’s gotten from its most popular usecase), kill is very versatile tool used to send specified signals to individual processes, or process groups.

It is part of the util-linux collection of programs and is widely available.

Here area a couple of usage examples. If no signal name/number is specified, SIGTERM (15) is assumed:

  • kill firefox:

Send a SIGTERM (15) signal to every process invoked as 'firefox'.

  • kill 15222 152101 -8:

Send signal number 8 to PIDs 15222 and 152101.

  • kill 152101 firefox -SIGKILL

Send a SIGKILL (9) signal to PID 152101 and every process invoked as firefox.

  • kill -s 19 1022 kitty

Send signal number 19 to PID 1022 and every process invoked as kitty.

  • kill -SIGKILL -933

Send a SIGKILL (9) signal to all processes in the process group 933.

  • kill -p firefox

Don’t send any signals, but print PIDs of named processes listed, and exit.


pidof is a tool used to list PIDs of processes by name. It doesn’t conduct any manipulation. It’s very useful when dealing with other , more primitive tools that conduct process manipulation but don’t have the ability to find PIDs based on their names.

Here are some usage examples:

  • pidof firefox

List PIDs of all processes with the name 'firefox'. PIDs are by default separated by space.

  • pidof firefox kitty -S x

List PIDs of all processes with the names 'firefox' or 'kitty', and separate PIDs with the character 'x'.


killall is kill on steroids. In addition to support the same operations as kill, it sports a bunch of other features, such as case insensitive search, matching process names using regexes, killing all processes belonging to a group of a specified process, filtering processes based on spawn-time and owning user…

Here are some usage examples that demonstrate functionality not available in kill:

  • killall firefox -Ii --user bogdan --younger-than 4.2m

Case-insensitively match every process’ name agaisnt firefox that belongs to the user bogdan, was spawned less than 4.2 minutes ago, and send a SIGTERM (15) to it. Interactively ask the user to confirm each match.

  • killall -I -9 -r 'kitty[1-9]+\.19'

Case-insenstively match every process against the specified regex, and send it a SIGKILL (9) signal, prompting the user before every match.

pgrep, pkill

These two are pretty similar killall, though they have even more functionality. pgrep matches process names against regexes and prints them out, while pkill does the same in addition to sending signals.

They sport options such as -c (suppresses normal output and prints a count of process matches to stdout, eliminating the need for hacky shell piping such - this can be interpreted as a good or a bad thing). Another example is the ability to test for multiple owning users (e.g. -u bogdan,root) will match processes owned by either the bogdan, or root users.

These two are the ones that I use most often, probably after kill.

In addition to the tools described here, other, more sophisticated alternatives have their ways of manipulating processes as well. Tools such as top or htop for example allow you to browse and manipulate processes in real time.