How to kill a process with name having spaces?
killall valgrind
will kill all valgrind
processes regardless of arguments. If you want to kill only processes whose command line is exactly valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03
, you can use pkill
:
pkill -xf 'valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03'
Like killall
, pkill
is on every non-embedded (and some embedded) Linux installations, and it's more powerful and often more reliable (but for some reason less well-known). The companion utility pgrep
is identical except that it lists the PIDs instead of killing.
Another utility you may be interested in is fuser
: fuser testcases/kernel/syscalls/waitpid/waitpid03
lists the processes that have the specified file open, and fuser -k
would send a signal to these processes. When you're not trying to send a signal, lsof
is a more powerful alternative to fuser
(shows more stuff, has more filters).
You don't need to give killall
the complete command line; killall valgrind
would be sufficient in your case.
~$ perl -e 'sleep 10000' &
[1] 3586
~$ ps ax | grep perl
3586 pts/3 S 0:00 perl -e sleep 10000
3588 pts/3 S+ 0:00 grep perl
~$ killall perl
[1]+ Terminated perl -e 'sleep 10000'
~$
As well as the other good solutions, you could always install htop and then kill what you want by scrolling through the list of running processes and using the F9 (kill) key. Ok, it's not hard-nosed, command line stuff but it works!