O comando kill
é um invólucro muito simples para a chamada de sistema kill
, que conhece apenas identificações de processo (PIDs). pkill
e killall
também são wrappers para a chamada de sistema kill
, (na verdade, para a biblioteca libc que chama diretamente a chamada do sistema), mas pode determinar os PIDs para você, com base em coisas como nome do processo, proprietário do processo, id da sessão, etc.
Como pkill
e killall
work podem ser vistos usando ltrace
ou strace
neles. No Linux, ambos lêem o sistema de arquivos /proc
e, para cada pid (diretório) encontrado, percorre o caminho de maneira a identificar um processo pelo nome ou por outros atributos. Como isso é feito, tecnicamente falando, é específico do kernel e do sistema. Em geral, eles lêem de /proc/<PID>/stat
, que contém o nome do comando como o segundo campo. Para pkill -f
e pgrep
examinar a entrada /cmdline
para a entrada proc de cada PID.
pkill
e pgrep
usam a chamada de sistema readproc
, enquanto killall
não. Eu não poderia dizer se há uma diferença de desempenho: você terá que testar isso sozinho.