Por que um daemon não possui um terminal associado?

1

Estou um pouco crivado pela convenção na criação de daemons do Linux. As pessoas geralmente concordam que o que faz um daemon não é um terminal associado. Além disso, em códigos de amostra, geralmente, o pai do processador é eliminado e o daemon é reparado no init. Eu não tenho nenhum problema em entender que essa é a maneira de fazer isso, MAS POR QUE? Como é benéfico que o processo não tenha terminal associado e seja um filho direto para iniciar?

    
por Pyjong 27.05.2018 / 09:38

1 resposta

1

link

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.

    
por 27.05.2018 / 10:01

Tags