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 eficaz e mata todos os processos e subprocessos (e recursivamente) que correspondem ao name
programa. pkill
não faz isso também?
linux
process
kill
process-management
mavillan
fonte
fonte
Respostas:
Os utilitários
pgrep
epkill
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. Emborapgrep
apenas imprima uma lista de processos correspondentes,pkill
enviará o sinal especificado (ouSIGTERM
por padrão) para os processos. As opções e semânticas comuns entrepgrep
e sãopkill
úteis quando você deseja ter cuidado e primeiro revise os processos de correspondência de lista epgrep
, em seguida, continue com elespkill
.pgrep
epkill
são fornecidos pelo os procps pacote, que também oferece outros/proc
utilitários do sistema de arquivos, comops
,top
,free
,uptime
entre outros.O
killall
comando é fornecido pelo pacote psmisc e difere dopkill
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 tornakillall
um pouco mais seguro de usar em comparação compkill
. 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
), enquantopkill
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".fonte
killall -u <username> -r <process>
ou opkill <process> -U <uid>
que facilitakillall
muito o uso.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áveispgrep
. Eles matam os processos da mesma maneira, e nenhum mata recursivamente - embora compgrep
, você pode selecionar por sessão (per-tty, pense em conjunto) ou grupo de processos (pense em controle de trabalho).fonte
uma diferença é que
killall
leva o nome exato do processo como argumento, enquanto quepkill
pode levar o nome parcial ou completo.Você pode consultar esta pergunta para conhecer em profundidade o pkill
fonte
killall
- mate processos pelo nome. Use okillall
comando 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.pkill
pode sinalizar vários processos comokillall
, mas também pode usar critérios de seleção avançados que podem incluir qualquer combinação de:Terminal pai do comando UID
fonte