Killing process group com segurança

1

Como alguém pode matar um grupo de processos com segurança e forçar o abate se necessário?

O objetivo é fazer um kill com SIGTERM (-15) e, em seguida, se os apps na árvore não morrerem após um tempo limite (por exemplo, 60 segundos), faça um SIGKILL (-9).

Temos um cenário com processo pai e um processo filho, compartilhando um pgid, E.g

Parent Process pid=123, pgid=123
|- Child Process pid=456, pgid=123

Atualmente estamos enviando o SIGTERM (-15) para o grupo de processos, então se o processo pai estiver morto, então assuma o sucesso.

No entanto, algumas vezes descobrimos que o processo pai é interrompido e o processo filho não morre.

Então, isso se resume a duas perguntas:

  1. Por que o pai pid morre se a criança não morre (isso é possível ou minhas suposições estão erradas)?

  2. Verificar se há algum processo no grupo de processos é a melhor maneira de garantir que todos os processos na árvore estejam mortos antes de enviar o kill -9 para o grupo de processos?

por dvvv 02.08.2017 / 17:45

1 resposta

0
  1. O pai tem que esperar explicitamente () por seus filhos se ele se importa com o estado de término. Por padrão, as crianças órfãs são transferidas para o init (pid1) e não terminadas.
  2. Infelizmente, quando eles são adotados pelo init, seus pgid mudam para seu próprio pid (órfão se torna sua própria sessão e pg líder).

Se você quiser ter certeza, você teria que fazer uma lista de todos os PIDs na pg, então faça uma pesquisa para ter certeza que eles morreram. O grupo de processos em si é desfeito quando o líder morre, portanto você não pode monitorar processos nesse pgid.

Se você realmente quiser realmente ter certeza (porque os PIDs podem ser reutilizados em sistemas muito ocupados), você precisaria fazer uma travessia em árvore de profundidade e matá-los, aguardando para cada um terminar antes de matar o próximo nível, mas você pode entrar em conflito com os pais que geram novamente seus filhos mortos. O script em esta resposta em SO lida com esse caso extremo.

    
por 03.08.2017 / 13:45