matar programas -9, mas eles ainda permanecem

11

Tentei matar todos os meus trabalhos em segundo plano enviados anteriormente no KUbuntu por

kill -9 $(jobs -p)

Embora este comando tenha imediatamente transmitido a mensagem como

[1] Meu trabalho matou1

[2] Meu trabalho matou2

Ainda consigo ver seus processos pendurados na saída do topo e os usos da CPU e da memória não são alterados na saída do tempo de atividade e livre.

Então acho que não devo tê-los matado adequadamente. Alguém pode explicar o que está acontecendo comigo e o que devo fazer?

Descobri que no topo, se digitar k e inserir o PID, posso matar os processos um por um. Então isso é diferente do comando kill?

Eu também encontrei em algum lugar online http://www.ruhr.de/home/smallo/award.html sobre não recomendar kill -9

Carta de formulário Uso Inútil da Matança -9

(Citar abominação)

Não não não. Não use kill -9.

Não dá ao processo a chance de limpar:

1) desligue as conexões do soquete

2) limpar arquivos temporários

3) informar seus filhos que está indo embora

4) redefinir suas características terminais

e assim por diante e assim por diante.

Geralmente, envie 15 e aguarde um ou dois segundos e, se isso não funcionar, envie 2 e, se não funcionar, envie 1. Se isso não funcionar, REMOVA O BINÁRIO, pois o programa está se comportando mal!

Não use kill -9. Não traga a colheitadeira apenas para arrumar o vaso de flores.

Isso é verdade? O que significa "enviar 15", "enviar 2" e "enviar 1"? Eles são comandos próprios ou "matam -15 PID", "matam -2 PID" e "matam -1 PID"?

Obrigado e cumprimentos!

Tim
fonte
Remover o binário (arquivo executável) por si só não mata o processo. O sistema de arquivos saberá que o processo está usando esse arquivo e permitirá que o processo "veja" o arquivo mesmo depois que você o removeu.
Jeppe Stig Nielsen

Respostas:

9

Seu processo provavelmente está inoperante, mas ainda aparece na entrada da tabela de processos porque é um "processo zumbi". Quando um processo filho é encerrado e desaparece completamente (exceto sua entrada na tabela de processos) e o pai não consegue obter seu status de término (através de qualquer uma das funções de espera), ele é chamado de zumbi ... Matando (através do sinal) um zumbi não trabalho porque já está encerrado. O que você precisa fazer é descobrir o processo pai e matar um deles de maneira limpa, sem usar o kill - 9

aqui estão dois passos simples para matar um zumbi ...

  1. se o pai ainda estiver vivo, tente matá-lo (ou SIGHUP é tudo que você precisa)
  2. se o número 1 falhar, há um erro no kernel .... reboot é seu amigo e corrija esse erro: ->
nkr1pt
fonte
Submeto meus trabalhos na linha de comando e em segundo plano, quais seriam os pais deles? E como posso encontrar os pais deles, se houver?
Tim
Use o -fsinalizador para ps para ver os processos pai.
30720 Jack M.
6

veja man killpara uma definição dos vários sinais disponíveis, mas sim.

  • 15 é SIGTERM e solicita a saída de um programa.
  • 2 é SIGINT e é equivalente a Control-C
  • 1 é SIGHUP e indica que o terminal desligou.

Eles informam a um processo que o usuário está "terminado" com o processo, embora indiquem razões um pouco diferentes.O SIGTERM pode ser interpretado como "concluir a tarefa atual, mas depois sair; não iniciar outro", SIGINT significa "abandonar o que você está fazendo e encerrando ", SIGHUP significa apenas que ninguém está mais ouvindo (um processo do servidor pode legitimamente reagir ao SIGHUP, interrompendo a saída do console e continuando em execução).

  • 9 é SIGKILL , e é especial por ser o único que o processo não pode capturar e manipular internamente. Simplesmente resulta no kernel que nunca retorna ao controle do processo, não dando chance para a limpeza.
puetzk
fonte
no topo, se digitar k e inserir o PID, eu posso eliminar os processos um por um. Então isso é equivalente a algumas opções para o comando kill?
Tim
Sim, o top apenas envia um sinal para o processo, o mesmo que o kill. AFAICT, o sinal padrão que o top usa é 15 (SIGTERM).
Puetzk
1

Significa usar kill -15 PID(ou outro número) em vez de kill -9 PID. Os números são equivalentes a diferentes sinais unix .

Adriano Varoli Piazza
fonte
1

Significa digitar "kill -1" ou "kill -15" em vez de digitar "kill -9". Kill -9 é uma bala pesada na cabeça de qualquer processo em execução, mata-a morta em um estado sujo que pode causar vazamento de memória, blá-blá-blá.

Se você estiver digitando kill -9 e não estiver funcionando, verifique se o processo não está sendo reaparecido e se você tem permissão para interromper esse processo.

Satanicpuppy
fonte
Como você olharia para garantir que o processo não fosse reaparecido? Desde que possuo os processos, tenho permissão para interromper esse processo?
Tim
Deverá ter um número de processo diferente, se for. Portanto, se você fizer ps-Al e vir processA, matará -9 processA e, em seguida, fará ps-Al e ainda haverá um processoA na fila de processos, verifique se é o mesmo processoA e não um novo.
23610 Satanicpuppy
E ele dirá se você não tem permissão para interromper o processo.
23610 Satanicpuppy
0

O sinal 9 é SIGKILL. Enviar um SIGKILL está pedindo ao sistema operacional para interromper imediatamente o processo, sem perguntas. O processo não é notificado com antecedência e não tem chance de limpar a si próprio.

O sinal 15 é SIGTERM. O envio de um SIGTERM está pedindo ao sistema operacional que peça ao processo que se desligue.

SIGKILL pode ser ignorado se o sistema operacional achar que o processo está executando IO ou se for um zumbi (um processo filho cujo pai não limpou depois dele).

O SIGTERM pode ser ignorado pelo aplicativo, mas não é recomendável que os aplicativos façam isso, pois os sistemas operacionais enviam o SIGTERM durante o desligamento, seguido em breve pelo SIGKILL se um programa ainda estiver em execução.

Nota: A linha de comando killestá sempre pedindo ao sistema operacional para enviar um sinal para o aplicativo, o que pode ou não ser feito com base em quem é o proprietário do processo, etc.

Powerlord
fonte