Qual é a diferença entre pkill e killall?

49

Eu sei que pkilltem 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 eficaz e mata todos os processos e subprocessos (e recursivamente) que correspondem ao nameprograma. pkillnão faz isso também?

mavillan
fonte
Relacionado: unix.stackexchange.com/questions/252349/…
Byte Commander

Respostas:

46

Os utilitários pgrepe pkillforam 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 pgrepapenas imprima uma lista de processos correspondentes, pkillenviará o sinal especificado (ou SIGTERMpor padrão) para os processos. As opções e semânticas comuns entre pgrepe 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. pgrepe pkillsão fornecidos pelo os procps pacote, que também oferece outros /procutilitários do sistema de arquivos, como ps, top, free, uptimeentre outros.

O killallcomando é fornecido pelo pacote psmisc e difere do pkillfato 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, --exactpode ser especificada para também exigir correspondências exatas para nomes com mais de 15 caracteres. Isso torna killallum 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. killalltambé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 killallcomando, por exemplo, possui opções para a correspondência de processos por idade ( -o, --older-thane -y, --younger-than), enquanto pkillpode ser dito para matar apenas processos em um terminal específico (por meio da -topção). Claramente, então, os dois comandos têm nichos específicos.

Observe que o killallcomando 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".

Thomas Nyman
fonte
A principal diferença que encontrei é a interrupção de comandos de um padrão por um usuário killall -u <username> -r <process>ou o pkill <process> -U <uid>que facilita killallmuito o uso.
jeremysprofile 24/06
13

pkillé aquele que vale a pena ensinar às gerações futuras, tanto pelos filtros que você menciona quanto pelo fato de estar emparelhado com os altamente reutilizáveis pgrep. Eles matam os processos da mesma maneira, e nenhum mata recursivamente - embora com pgrep, você pode selecionar por sessão (per-tty, pense em conjunto) ou grupo de processos (pense em controle de trabalho).

Gabriel
fonte
8

uma diferença é que killallleva o nome exato do processo como argumento, enquanto que pkillpode levar o nome parcial ou completo.

Você pode consultar esta pergunta para conhecer em profundidade o pkill

electropoet
fonte
1

killall- mate processos pelo nome. Use o killallcomando para enviar um sinal para um ou mais processos que correspondem aos critérios de seleção, como nome do comando, processos pertencentes a um usuário específico ou todos os processos em todo o sistema.

pkill- enviará o sinal especificado (por padrão SIGTERM) para cada processo, em vez de listá-los no stdout. pkillpode 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:

Terminal pai do comando UID

user196507
fonte