Para um daemon, o que você quer é um processo que não tenha nenhum empecilho a nada. No mínimo, você quer que ele esteja em sua própria sessão, não seja anexado a um terminal, não tenha nenhum descritor de arquivo herdado do pai aberto a nada, não tenha um pai cuidando de você (que não seja o init) tenha o atual diretório em /
para não evitar um umount ...
Para desanexar de um terminal, crie uma nova sessão, no entanto, para criar uma sessão, você não deve ser um líder de grupo (ou sessão), portanto, o melhor é criar um novo processo. Supondo que o pai saia, isso também significa que o processo não terá mais um pai e será adotado pelo init. Então, você chdir("/")
fecha todos os descritores de arquivos possíveis.
Como esse processo é um líder de sessão, existe o risco de que, se ele abrir um dispositivo terminal, ele se torne o processo de controle desse terminal. Bifurcando uma segunda vez garante que isso não aconteça.
No outro extremo, & amp ;, em shells interativos, forks e cria um novo grupo de processos (para não estar no grupo de processos de primeiro plano do terminal), e em shells não interativos, bifurca um processo e ignora o SIGINT em isto. Ele não desanexa do terminal, não fecha descritores de arquivos (embora alguns shells reabrem stdin para /dev/null
) ...