desenv-web-rp.com

Qual é a diferença entre pkill e killall?

Eu sei que pkill tem mais regras de filtragem 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 programa name. pkill não faz isso também?

54
mavillan

Os utilitários pgrep e pkill foram introduzidos no Solaris 7 da Sun e, como g33klord observo , eles usam um padrão como argumento que corresponde aos nomes dos processos em execução. Enquanto pgrep apenas imprime uma lista de processos correspondentes, pkill envia o sinal especificado (ou SIGTERM por padrão) para os processos. As opções e semânticas comuns entre pgrep e pkill são úteis quando você deseja ter cuidado e primeiro revise os processos de correspondência de lista com pgrep e depois mate-os com pkill. pgrep e pkill são fornecidos pelo pacote procps , que também fornece outros utilitários do sistema de arquivos /proc, Como ps , top , free , uptime entre outras.

O comando killall é fornecido pelo pacote psmisc e difere de pkill, pois, por padrão, corresponde exatamente ao nome do argumento (até os 15 primeiros caracteres) ) ao determinar os sinais dos processos serão enviados para. 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 de 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, através da opção -r, --regexp.

Existem também outras diferenças. O comando killall, 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 (através da opção -t). Claramente, então, os dois comandos têm nichos específicos.

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

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

49
Thomas Nyman

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

14
Gabriel

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

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

8
electropoet

killall - mata 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 em todo o sistema.

pkill - envia 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:

Terminal pai do comando UID

1
user196507