Editar
Na verdade, eu dei uma olhada em um antigo sistema 10.04 do Ubuntu que tinha o rsyslogd 4.2.0 rodando.
Esse não chamou setsid()
(então, herdou o sid do processo que o executou), mas o fez (aqui de strace
output):
19391 open("/dev/tty", O_RDWR|O_LARGEFILE|O_CLOEXEC) = 0
19391 ioctl(0, TIOCNOTTY) = 0
Para desanexar do terminal.
Analisando o código-fonte , ele faz isso somente quando HAVE_SETSID
não está definido. Obviamente, o Linux tem setsid()
e tem tido por décadas, então há algo errado.
Agora, olhando mais para a fonte, é apenas o procedimento de compilação que nunca define HAVE_SETSID
, pois não verifica o suporte de setsid()
em primeiro lugar.
O erro (um erro de digitação: setsid
escrito setid
no arquivo autoconf) foi corrigido em 2013 (lançado pela primeira vez no rsyslogd 7.5.3).
(btw, consulte a seção TODO sobre HP / UX no código antigo que mostra que os autores já haviam percebido que havia algo errado (mas não investigaram até muito mais tarde)).
Mantendo a resposta original abaixo, pois é possível encontrar informações úteis.
Um palpite:
Se você é um líder de sessão e abre um dispositivo tty
sem o sinalizador O_NOCTTY
, você se torna o processo de controle de um terminal.
É por isso que ao tentar executar um aplicativo (que não foi projetado para ser executado como um daemon) para ser executado como um daemon, é recomendável fazer outro fork após o setsid()
antes de executá-lo para garantir que o processo não se torna inadvertidamente um controlador de terminal se, por algum motivo, ele abrir um dispositivo tty.
syslogd
normalmente abre dispositivos tty para enviar mensagens de usuários, então pode ser por isso que seu livro diz que o syslogd não é um líder de sessão, descrevendo o comportamento de implementações syslogd de um tempo em que o sinalizador O_NOCTTY não existia essa bandeira existe pelo menos desde o final dos anos 80).
A outra abordagem é para o syslogd certificar-se de que todos os arquivos abertos sejam abertos com O_NOCTTY, que é provavelmente o que seu rsyslogd
(nada a ver com systemd
) possui.