Estou tentando emular adequadamente o tratamento de sinais POSIX e o controle de tarefas parameu sistema operacional de estimação, mas não está claro para mim o que deve acontecer com uma sessão após a saída do líder da sessão.
Não consigo encontrar documentação relacionada ao que acontece com a sessão e seu processo se, por exemplo, uma criança mata o líder da sessão enquanto vários processos em segundo plano e um processo em primeiro plano diferente estão em execução.
Meus testes mostram que todos os processos da sessão foram eliminados, mas como?
Eles recebem um sinal específico?
Este caso está especificado no padrão POSIX? E se sim, você pode fornecer algumas referências?
Responder1
Você não é o único intrigado com as sessões POSIX; Lennart Poettering (o systemd
famoso)também está intrigado.
Pelo que se sabe, quando um líder de sessão morre, init
herda a sessão órfã e
Todos os processos membros da sessão no grupo de processos em primeiro plano (se houver) recebem um SIGHUP.
Os processos membros da sessão que não estão no grupo em primeiro plano não recebem nenhum sinal.
Veja também:
- notas.shichao.io/apue/ch9
- Capítulo 10 "Processos" em O Kernel Linuxpor Andries Brouwer (2003).
Se o terminal desligar devido ao desligamento do modem e a linha não for local, um SIGHUP será enviado ao líder da sessão. [...] Quando o líder da sessão morre, um SIGHUP é enviado para todos os processos do grupo de processos em primeiro plano. [...] Assim, se o terminal desaparecer e o líder da sessão for um shell de controle de trabalho, ele poderá lidar com as coisas para seus descendentes, por exemplo, enviando-lhes novamente um SIGHUP. Se, por outro lado, o líder da sessão for um processo inocente que não captura SIGHUP, ele morrerá e todos os processos em primeiro plano receberão um SIGHUP.
Andries Brower,O Kernel Linux, seção 10.3 "Sessões".