O fork & exit torna um processo um daemon?

3
int main()
{
    if (!fork()) sleep(3000);
    exit(0);
}

Invocar o programa acima do shell gera um processo órfão que

  1. é adotado por init ou upstart (no meu Ubuntu Desktop)
  2. está na mesma sessão que o shell
  3. líder do grupo perdido
  4. não é gerenciado pelo controle de tarefa do shell, , o que significa que ele não receberá SIGHUP mesmo se o shell receber um SIGHUP

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:

  1. meu processo ainda compartilha a mesma sessão com o shell
  2. meu processo ainda tem um "controle tty", conforme exibido por 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.

Referências (ainda não me convenceram)

por Cedric Sun 19.03.2018 / 09:29

0 respostas

Tags