O que pode fazer com que o suspiro seja gerado?

Temos cerca de 40 computadores a executar hardware e software idênticos. Todos eles gerem Ubuntu 11.10. Todos eles têm apenas uma conta de usuário para fazer login. O .o ficheiro de perfil está configurado para lançar um processo de servidor. O código do servidor está escrito em C.

Uma vez em poucas semanas, recebemos um relatório de que o daemon já não está em execução. Isto não acontece em todos os computadores, mas apenas um ou dois. Não podemos reproduzir o problema de forma consistente.

olhando para o código, a aplicação desiste quando recebe Suspiros ou SIGTERM.

Pelo que sei, o SIGHUP é gerado quando um utilizador sai. No nosso caso, o utilizador nunca sai. Pergunto-me se é possível que o suspiro tenha sido gerado por outra razão. Qualquer outro pensamento seria apreciado.

Author: slhck, 2012-11-12

2 answers

Os Sinais podem ser enviados usando {[[0]} utilitário ou matar o syscall. É claro que você pode tentar descobrir quem está enviando esse sinal ou desligando seus terminais ou conexões de rede, mas há uma maneira prática mais simples de corrigir o seu problema.

Quando o código é suposto correr como um daemon, mas realmente não é (tal como o seu), existe um invólucro que pode transformar qualquer programa em daemon. Surpresa - este invólucro chama-se daemon! Ele tem muitas opções, provavelmente mais importante para você, opção para reiniciar automaticamente o seu utilitário se ele alguma vez morrer por qualquer razão.

Se este comando não estiver instalado no seu Ubuntu, apenas sudo apt-get install daemon, e man daemon para começar.

 9
Author: mvp, 2012-11-12 03:09:53
Bem, há algumas coisas a notar sobre suspiros. Em primeiro lugar, a sua origem é a partir do conceito de um desligamento, ou seja, perda de ligação a um console sobre algo como um modem. Na linguagem moderna isso geralmente significa que perdeu a sua tty controladora. A menos que tenha tido o cuidado de se afastar do tty, qualquer programa iniciado num determinado terminal receberá um suspiro quando o terminal estiver fechado. Veja aqui para detalhes sobre como fazer isso em seu programa. Alternativa incluem:
  • executando o seu programa dentro {[[0]} ou tmux
  • execute o seu programa com nohupou com qualquer outra estrutura de daemonização
A outra possibilidade é que algo está deliberadamente enviando ao seu processo um suspiro que é por" tradição " é muitas vezes usado para sinalizar um processo que ele deve re-ler sua configuração.
 15
Author: stsquad, 2018-06-12 13:24:10