I segnali possono essere inviati utilizzando kill
utility o kill syscall. Naturalmente, puoi provare a scoprire chi sta inviando quel segnale o disconnettendo i tuoi terminali o le connessioni di rete, ma esiste un modo pratico più semplice per risolvere il tuo problema.
Quando il codice dovrebbe essere eseguito come demone, ma in realtà non lo è (proprio come il tuo), c'è un wrapper che può trasformare qualsiasi programma in demone. Sorpresa:questo wrapper si chiama daemon
! Ha molte opzioni, probabilmente la più importante per te, l'opzione per riavviare automaticamente la tua utilità se dovesse mai morire per qualsiasi motivo.
Se questo comando non è installato su Ubuntu, basta sudo apt-get install daemon
e man daemon
per iniziare.
Bene, ci sono un paio di cose da notare su SIGHUP. In primo luogo, la sua origine deriva dal concetto di interruzione, ovvero perdita di connessione a una console tramite qualcosa come un modem. Nel gergo moderno questo generalmente significa che ha perso il suo tty di controllo. A meno che tu non abbia avuto cura di staccarti dal tuo tty, qualsiasi programma avviato in un dato terminale riceverà un SIGHUP quando il terminale viene chiuso. Vedi qui per i dettagli su come farlo nel tuo programma. Altre opzioni includono:
- eseguendo il tuo programma all'interno di
screen
otmux
- esegui il tuo programma con
nohup
o qualche altro framework di demonizzazione
L'altra possibilità è che qualcosa stia deliberatamente inviando al tuo processo un SIGHUP che per "tradizione" è spesso usato per segnalare a un processo che dovrebbe rileggere la sua configurazione.