Se você enviar um sinal para um processo, esse processo será eliminado. Eu me pergunto como o boato de que matar um processo também mata outros processos iniciados parece particularmente contra-intuitivo.
Existem, no entanto, maneiras de matar mais de um processo. Mas você não estará enviando um sinal para um processo. Você pode matar todo um grupo de processos enviando um sinal para -1234, onde 1234 é o PGID (process group ID), que é o PID do líder do grupo de processos. Quando você executa um pipeline , todo o pipeline começa como um grupo de processos (os aplicativos podem alterar isso chamando setpgid
ou setpgrp
).
Quando você inicia processos em segundo plano ( foo &
), eles estão em seu próprio grupo de processos. Grupos de processos são usados para gerenciar o acesso ao terminal; normalmente apenas o grupo de processos em primeiro plano tem acesso ao terminal. Os trabalhos em segundo plano permanecem na mesma sessão , mas não há nenhuma facilidade para matar uma sessão inteira ou mesmo para enumerar os grupos de processos ou processos em uma sessão, de modo que não ajuda muito.
Quando você fecha um terminal, o kernel envia o sinal SIGHUP
para todos os processos que o têm como < href="http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_114"> controle do terminal . Esses processos formam uma sessão , mas nem todas as sessões têm um terminal de controle. Para o seu projeto, uma possibilidade é, portanto, iniciar todos os processos em seu próprio terminal, criado por script , tela , etc. Mate o processo do emulador de terminal para eliminar os processos contidos (supondo que eles t dividido com setsid
).
Você pode fornecer mais isolamento executando os processos como seu próprio usuário, que não faz mais nada. Então é fácil eliminar todos os processos: execute kill
(a chamada de sistema ou o < um href="http://pubs.opengroup.org/onlinepubs/009695399/utilities/kill.html"> utilitário ) como esse usuário e use -1 como o argumento PID para matar, significando “tudo isso processos do usuário ”.
Você pode fornecer ainda mais isolamento, mas com consideravelmente mais configurações, executando os processos contidos em um contêiner .