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

31

Eu estou familiarizado com o killcomando, e na maioria das vezes usamos o kill -9 para matar um processo com força, existem muitos outros sinais que podem ser usados kill. Mas gostaria de saber quais são os casos de uso pkille killall, se já existe um comando kill.

Faça pkille killalluse o killcomando em sua implementação? Quero dizer, eles são apenas invólucros killou têm sua própria implementação?

Também gostaria de saber como o pgrepcomando obtém a identificação 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 é o mais rápido?

Ijaz Ahmad Khan
fonte
2
Duas coisas: Por que usar kill -9por padrão? -15 (por favor, pare) e -1 (o modem desligou, por favor, LIMPEZA se fechou) são muito mais educados. Em segundo lugar. Cuidado ao usar killall em caixas não-linux. Pode se comportar de maneira diferente. (Por exemplo, no solaris, mata tudo. NÃO É FILTRADO nos nomes dos processos).
Hennes
Relacionado: unix.stackexchange.com/questions/91527/…
Byte Commander

Respostas:

31

O killcomando é um wrapper muito simples para a kill chamada do sistema , que conhece apenas PIDs (IDs de processo). pkille killalltambém são wrappers para a kill chamada do sistema (na verdade, para a biblioteca libc que chama diretamente a chamada do sistema), mas podem determinar os PIDs para você, com base em coisas como, nome do processo, proprietário do processo, ID da sessão etc.

Como pkille killalltrabalho podem ser vistos usando ltraceou stracesobre eles. No Linux, os dois lêem o /procsistema de arquivos e, para cada pid (diretório) encontrado, percorre o caminho de maneira a identificar um processo por seu nome ou outros atributos. Como isso é feito é tecnicamente falando, específico do kernel e do sistema. Em geral, eles lêem o /proc/<PID>/statque contém o nome do comando como o 2º campo. Para pkill -fe pgrepexamine a /cmdlineentrada para cada entrada de proc do PID.

pkille pgrepuse a readprocchamada do sistema, enquanto killallnão. Eu não poderia dizer se há uma diferença de desempenho: você terá que avaliar isso sozinho.

Otheus
fonte
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 (lista) e pkill (kill por padrão) são ferramentas que fornecem uma maneira de enviar mensagens para um processo por seu nome ou outros atributos, consulte: http://linux.die.net/man/1/pkill Para obter mais informações sobre sinais: http://linux.die.net/man/7/signal

dervishe
fonte
Você quer dizer que killallé usado para matar um processo pelo nome? e usa o pgrep para esse fim? e killalltambém mata todos os processos filho,? qual sinal killallusa por padrão?
Ijaz Ahmad Khan
3
... a menos que você esteja no Solaris, nesse caso, killallvocê matará todos os processos que você tem o direito de matar, para que, se você for root, esteja efetivamente reinicializando o servidor.
Jenny D
1
sim: killall chromiummatará o processo de cromo, pgrep chromiumfornecerá a lista PID, pkill chromiummatará cromo. killall enviará por padrão o sinal SIGTERM (como pkill)
dervishe