SIGHUP - SIGHUP

Em POSIX plataformas que cumprem, SIGHUP ( " sig nal h ang -se ") é um sinal enviado para um processo , quando o seu terminal de controlo é fechada. (Ele foi originalmente projetado para notificar o processo de queda de linha serial .) SIGHUP é uma constante simbólica definida no arquivo de cabeçalho signal.h .

História

Um desligamento costumava ser o resultado de um usuário conectado desligando fisicamente o modem

O acesso a sistemas de computador por muitos anos consistiu em conectar um terminal a um sistema mainframe por meio de uma linha serial e do protocolo RS-232 . Por esta razão, quando um sistema de interrupções de software , denominado sinais, estava sendo desenvolvido, um sinal foi designado para uso no "Hangup".

O SIGHUP seria enviado aos programas quando a linha serial fosse interrompida, geralmente porque o usuário conectado encerrou a conexão desligando o modem. O sistema detectaria que a linha foi descartada por meio do sinal perdido Data Carrier Detect (DCD).

Os sinais sempre foram um método conveniente de comunicação entre processos (IPC), mas nas primeiras implementações não havia sinais definíveis pelo usuário (como as adições posteriores de SIGUSR1 e SIGUSR2 ) que os programas pudessem interceptar e interpretar para seus próprios fins. Por esse motivo, os aplicativos que não exigem um terminal de controle, como daemons , reaproveitam o SIGHUP como um sinal para reler os arquivos de configuração ou reinicializar. Essa convenção sobrevive até hoje em pacotes como Apache e Sendmail .

Uso moderno

Com o declínio do acesso via linha serial, o significado de SIGHUP mudou um pouco nos sistemas modernos, muitas vezes significando que um pseudo terminal de controle ou virtual foi fechado. Se um comando for executado dentro de uma janela de terminal e a janela do terminal for fechada enquanto o processo de comando ainda está em execução, ele recebe SIGHUP.

Se o processo que recebe SIGHUP for um shell Unix , então, como parte do controle de trabalho, ele freqüentemente interceptará o sinal e garantirá que todos os processos parados continuem antes de enviar o sinal para processos filho (mais precisamente, grupos de processos , representados internamente pelo shell como um "trabalho"), que por padrão os encerra.

Isso pode ser contornado de duas maneiras. Em primeiro lugar, a Single UNIX Specification descreve um utilitário shell chamado nohup , que pode ser usado como um invólucro para iniciar um programa e fazê-lo ignorar o SIGHUP por padrão. Em segundo lugar, grupos de processos filho podem ser "deserdados" invocando disown com o id do trabalho , que remove o grupo de processos da tabela de trabalho do shell (para que não sejam enviados SIGHUP) ou (opcionalmente) os mantém na tabela de trabalho, mas evita de receber SIGHUP no encerramento do shell.

Escudos diferentes também têm outros métodos de controle e gestão SIGHUP, como a renegar facilidade de ksh . A maioria da documentação de distribuições Linux modernas especifica o uso kill -HUP <processID> para enviar o sinal SIGHUP.

Os programas Daemon às vezes usam SIGHUP como um sinal para reiniciarem a si mesmos, o motivo mais comum para isso é reler um arquivo de configuração que foi alterado.

Detalhes

Os nomes de sinais simbólicos são usados ​​porque os números dos sinais podem variar entre as plataformas, mas os sistemas em conformidade com XSI permitem o uso da constante numérica 1 para indicar um SIGHUP, que a grande maioria dos sistemas de fato usa.

SIGHUP pode ser manipulado . Ou seja, os programadores podem definir a ação que desejam que ocorra ao receber um SIGHUP, como chamar uma função , ignorá-la ou restaurar a ação padrão.

A ação padrão em sistemas compatíveis com POSIX é um encerramento anormal.

Referências

Veja também