Qual é a diferença entre pkill e killall?

38

Eu sei que pkill tem mais regras de filtragem do que killall . Minha pergunta é: qual é a diferença entre:

pkill [signal] name

e

killall [signal] name

Eu li que killall é mais efetivo e mata todos os processos e subprocessos (e recursivamente) que combinam com o programa name . pkill não faz isso também?

    
por mavillan 20.09.2013 / 05:00

4 respostas

38

A pgrep e pkill os utilitários foram introduzidos no Solaris 7 da Sun e, como g33klord observou , eles pegam um padrão como argumento que é comparado com os nomes dos processos em execução. Enquanto pgrep simplesmente imprime uma lista de processos correspondentes, pkill enviará o sinal especificado (ou SIGTERM por padrão) aos processos. As opções e semânticas comuns entre pgrep e pkill são úteis quando você deseja ter cuidado e primeiro revisar os processos de correspondência de lista com pgrep e, em seguida, prosseguir para eliminá-los com pkill . pgrep e pkill são fornecidos pelo pacote procps , que também fornece outros utilitários de sistema de arquivos /proc , como ps , < a href="http://linux.die.net/man/1/top" title="Página de manual para o topo"> top , free , uptime entre outros.

O comando killall é fornecido pelos utilitários psmisc , e difere de pkill em que, por padrão, corresponde exatamente ao nome do argumento (até os primeiros 15 caracteres) ao determinar os sinais dos processos para os quais será enviado. A opção -e , --exact pode ser especificada para exigir também correspondências exatas para nomes com mais de 15 caracteres. Isso torna killall um pouco mais seguro em comparação com pkill . Se o argumento especificado contiver caracteres slash ( / ), o argumento será interpretado como um nome de arquivo e os processos em execução nesse arquivo específico serão selecionados como destinatários de sinal. killall também suporta correspondência de expressões regulares de nomes de processos, por meio da opção -r , --regexp .

Existem outras diferenças também. O comando killall , por exemplo, tem opções para correspondência de processos por idade ( -o , --older-than e -y , --younger-than ), enquanto pkill pode ser instruído a apenas matar processos em um terminal específico (via -t opção). Claramente, então, os dois comandos têm nichos específicos.

Observe que o comando killall nos sistemas descendente de Sistema Unix V (notavelmente Solaris da Sun , AIX da IBM e HP-UX da HP ) mata todos os processos elimináveis por um usuário em particular, desligando efetivamente o sistema se executado por root.

Os utilitários psmisc do Linux foram portados para a BSD (e em extensão Mac OS X ), portanto killall segue a semântica" processar processos por nome ".

    
por 20.09.2013 / 08:29
10

pkill é o que vale a pena ensinar às futuras gerações, tanto por causa dos filtros que você menciona quanto pelo fato de estar emparelhado com o altamente reutilizável pgrep . Eles matam processos da mesma forma, e não mata recursivamente - embora com pgrep , você pode selecionar por sessão (per-tty, think setsid) ou grupo de processos (pense em controle de tarefa).

    
por 21.09.2013 / 00:35
6

uma diferença é que killall considera o nome exato do processo como argumento, enquanto pkill pode receber nome parcial ou completo.

Você pode consultar esta pergunta para saber em profundidade sobre pkill

    
por 20.09.2013 / 05:47
0

killall - elimina processos por nome. Use o comando killall para enviar um sinal para um ou mais processos correspondentes aos critérios de seleção, como nome do comando, processos pertencentes a um usuário específico ou todos os processos do sistema.

pkill - enviará o sinal especificado (por padrão, SIGTERM) para cada processo, em vez de listá-los no stdout. pkill pode sinalizar vários processos como killall , mas também pode usar critérios de seleção avançados que podem incluir qualquer combinação de:

Comando

UID Pai Terminal

    
por 22.10.2016 / 19:22