1. Como é benéfico que o processo não tenha terminal associado?
On POSIX-compliant platforms, SIGHUP ("signal hang up") is a signal sent to a process when its controlling terminal is closed. (It was originally designed to notify the process of a serial line drop.)
[...]
The default action [of SIGHUP] on POSIX-compliant systems is an abnormal termination.
Se eu entendi a situação corretamente, existem dois casos diferentes.
O caso óbvio é que se você fechar, e. um emulador de terminal como o Terminal GNOME ou mc
, que fecha a extremidade principal de um dispositivo pseudo-terminal. E esse fechamento gera um desligamento no pseudo-terminal. Isso afeta o dispositivo escravo. Todos os processos controlados por este terminal receberão SIGHUP. Este não é o caso descrito acima.
@JDePB aponta o segundo caso: se você fechar todos os descritores de arquivos referenciando um dispositivo de terminal, ele também gerará um desligamento. Isto é, se seu daemon fecha seu FD para seu tty (o que deveria), e mais tarde em outros processos que possuem FDs abertos da saída tty, seu daemon receberá SIGHUP, mesmo se seu emulador de terminal não responder e sair a extremidade principal do pseudo-terminal aberto. Essa funcionalidade pode ser desabilitada para todo o dispositivo de terminal por limpeza de HUPCL .
Há também vhangup()
. Parece que login
chama isso para tentar garantir que a sessão anterior não possa interferir. Ou alguma coisa. Não estou totalmente claro, já que esta chamada é específica do Linux e a página de manual é muito curta.
2. e é um filho direto para iniciar?
If the process receiving SIGHUP is a Unix shell, then as part of job control it will often intercept the signal and ensure that all stopped processes are continued before sending the signal to child processes (more precisely, process groups, represented internally by the shell as a "job"), which by default terminates them.