int main()
{
if (!fork()) sleep(3000);
exit(0);
}
Invocar o programa acima do shell gera um processo órfão que
init
ou upstart
(no meu Ubuntu Desktop) Cerca de 4: testei e confirmei isso em bash
no meu Ubuntu Desktop. Não tenho certeza se isso é válido para outros sinais além de SIGHUP. O mesmo se aplica se você disown
um trabalho: grupos de processos que não estão listados pelo comando jobs
não receberão SIGHUP.
Como também podemos fechar todos os FDs e chdir
e registrar nos arquivos, a única diferença entre isso e uma daemonização normal é que:
ps j
Então, meu problema é: Podemos considerar esse processo como um daemon?
Ou, em outras palavras, por que é tão importante que um daemon esteja em uma nova sessão (chamada setsid()
) sem ctty, já que não importa nada (corrija-me se não) para que ele esteja no mesma sessão do shell de chamada com o ctty conectado?
Ou, em outras palavras, novamente: Por que é ruim para um processo que deseja servir como daemon manter sua sessão inalterada e ainda conectada a um terminal (mesmo se fecharmos seus FDs)?
Eu acho que esses problemas são consistentes em sua natureza. Agradecemos antecipadamente.
Tags daemon