Os utilitários pgrep
e pkill
foram introduzidos no Solaris 7 da Sun e, como observou o g33klord , eles adotam um padrão como argumento que é comparado aos nomes dos processos em execução. Embora pgrep
apenas imprima uma lista de processos correspondentes, pkill
enviará o sinal especificado (ou SIGTERM
por padrão) para os processos. As opções e semânticas comuns entre pgrep
e são pkill
úteis quando você deseja ter cuidado e primeiro revise os processos de correspondência de lista e pgrep
, em seguida, continue com eles pkill
. pgrep
e pkill
são fornecidos pelo os procps pacote, que também oferece outros /proc
utilitários do sistema de arquivos, como ps
, top
, free
, uptime
entre outros.
O killall
comando é fornecido pelo pacote psmisc e difere do pkill
fato de, por padrão, corresponder exatamente ao nome do argumento (até os 15 primeiros caracteres) ao determinar os sinais aos quais os processos serão enviados. A opção -e
, --exact
pode ser especificada para também exigir correspondências exatas para nomes com mais de 15 caracteres. Isso torna killall
um pouco mais seguro de usar em comparação com pkill
. Se o argumento especificado contiver /
caracteres barra ( ), o argumento será interpretado como um nome de arquivo e os processos executando esse arquivo específico serão selecionados como destinatários do sinal. killall
também suporta correspondência de expressão regular de nomes de processos, por meio da opção -r
,--regexp
Há outras diferenças também. O killall
comando, por exemplo, possui opções para a correspondência de processos por idade ( -o
, --older-than
e -y
, --younger-than
), enquanto pkill
pode ser dito para matar apenas processos em um terminal específico (por meio da -t
opção). Claramente, então, os dois comandos têm nichos específicos.
Observe que o killall
comando nos sistemas descendentes do Unix System V (principalmente o Solaris da Sun , o AIX da IBM e o HP-UX da HP ) mata todos os processos executáveis por um usuário específico, encerrando o sistema efetivamente se executado pela raiz.
Os utilitários psmisc do Linux foram portados para o BSD (e na extensão Mac OS X ); portanto killall
, segue a semântica "kill process by name".