Qual é a diferença entre kill, pkill e killall?

21

Estou familiarizado com o comando kill , e na maioria das vezes usamos kill -9 para matar um processo com força, existem muitos outros sinais que podem ser usados com kill . Mas eu me pergunto quais são os casos de uso de pkill e killall , se já existe um comando kill.

Os pkill e killall usam o comando kill em sua implementação? Quer dizer, eles são apenas invólucros sobre kill ou eles têm sua própria implementação?

Eu também gostaria de saber como o comando pgrep obtém o ID do processo a partir do nome do processo.

Todos esses comandos usam as mesmas chamadas de sistema subjacentes? Existe alguma diferença do ponto de vista do desempenho, qual é mais rápido?

    
por Ijaz Ahmad Khan 30.12.2015 / 16:55

2 respostas

25

O comando kill é um invólucro muito simples para a chamada de sistema kill , que conhece apenas identificações de processo (PIDs). pkill e killall também são wrappers para a chamada de sistema kill , (na verdade, para a biblioteca libc que chama diretamente a chamada do sistema), mas pode determinar os PIDs para você, com base em coisas como nome do processo, proprietário do processo, id da sessão, etc.

Como pkill e killall work podem ser vistos usando ltrace ou strace neles. No Linux, ambos lêem o sistema de arquivos /proc e, para cada pid (diretório) encontrado, percorre o caminho de maneira a identificar um processo pelo nome ou por outros atributos. Como isso é feito, tecnicamente falando, é específico do kernel e do sistema. Em geral, eles lêem de /proc/<PID>/stat , que contém o nome do comando como o segundo campo. Para pkill -f e pgrep examinar a entrada /cmdline para a entrada proc de cada PID.

pkill e pgrep usam a chamada de sistema readproc , enquanto killall não. Eu não poderia dizer se há uma diferença de desempenho: você terá que testar isso sozinho.

    
por 30.12.2015 / 17:32
2

kill e killall são ferramentas que fornecem uma maneira de matar um processo. O primeiro pelo seu PID, o segundo pelo seu nome. pgrep (list) e pkill (kill por padrão) são ferramentas que fornecem uma maneira de enviar mensagens para um processo pelo seu nome ou outros atributos. veja: link Para mais informações sobre sinais: link

    
por 30.12.2015 / 17:17