Eu tenho uma pergunta. Estudando gerenciamento de processos, observei um comportamento estranho, em um CentOS 7. Eu sei que matando um processo pai, os processos filhos também são mortos. Mas não no caso seguinte. Eu executei o comando dd, apenas por exemplo:
[root@server2 ~]# dd if=/dev/zero of=/dev/null &
[1] 1756
[root@server2 ~]# ps fax | grep -B2 dd
1737 pts/2 S 0:00 \_ su -
1741 pts/2 S 0:00 \_ -bash
1756 pts/2 R 1:18 \_ dd if=/dev/zero of=/dev/null
Depois disso tentei matar (com sinal SIGKILL) o processo pai, que é o bash, mas essa ação não mata o processo dd:
[root@server2 ~]# kill -9 1741
Killed
[user@server2 ~]#
O shell termina, mas como você pode ver na saída do comando superior, o processo dd ainda está funcionando:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1756 root 20 0 107948 612 512 R 99.9 0.1 10:06.98 dd
Você tem alguma ideia sobre isso, por favor?
Por padrão, matar um processo pai não mata os processos filhos.
Sugiro que você procure outras questões sobre como matar o pai e o filho usando o grupo de processos (um PID negativo).
Uma boa resposta sobre como fazer isso em detalhes pode ser encontrada em Descendentes do processo
Por favor, ajuste às suas próprias necessidades, especialmente no comando kill:
Exemplo de uso seria:
kill_recurse <my_parent_pid>
Eu estava em uma situação semelhante e encontrei a resposta.
TLDR;
tentar:
kill -2 <parent_pid>
Você saberá se esse método funcionará para você, se ao executar seu script e pressionar Ctrl+ Cmataria o pai e todos os processos gerados.
A razão para isso são os diferentes sinais que
kill
podem enviar. Por padrãokill <pid>
enviará15 <SIGTERM>
sinal. Mas o sinal regular ao pressionar Ctrl+ Cnão15 <SIGTERM>
é de fato2 <SIGINT>
.Portanto, se
kill -2 <pid>
isso matar seu processo pai, como se o tivesse interrompido com Ctrl+Cfonte