Was kann die Ursache SIGHUP generiert werden?
Wir haben über 40 Computern mit identischer hardware und software. Sie laufen alle Ubuntu 11.10. Sie alle haben nur ein Benutzer-Konto anmelden. Die .Profil-Datei eingerichtet wird, starten Sie eine daemon-Prozess. Der code für den daemon ist in C geschrieben.
Einmal in ein paar Wochen, werden wir einen Bericht bekommen, dass der daemon nicht mehr läuft. Dies passiert nicht auf allen Rechnern, aber nur eine, oder zwei. Können wir nicht reproduzieren Sie das problem konsequent.
Blick auf den code, wird die Anwendung beendet, wenn es bekommt entweder SIGHUP oder SIGTERM.
So wie ich das verstehe, SIGHUP wird generiert, wenn ein Benutzer sich abmeldet. In unserem Fall hat der Benutzer sich nie abmeldet. Ich Frage mich, ob es möglich ist, dass SIGHUP hätte generiert aus einem anderen Grund. Jeder andere Gedanke wäre zu begrüßen.
- haben Sie versucht, die Anmeldung zu dem Dämon um zu sehen, welches die 2 Signale wenn alle sind, die es verursacht? SIGHUP scheint ausgelöst zu werden, wenn die kontrollierende terminal ist geschlossen, aber wenn Sie mit server-builds und nur die 1 Haupt-Begriff Verbindung, ich denke, der Unterschied ist irrelevant
- Signale können auch manuell gesendet werden. Wer weiß?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Signale gesendet werden können, mit
kill
utility-or-kill-syscall.Natürlich, Sie können versuchen und finden Sie heraus, wer sendet, dass die signal-oder die Trennung eines terminals oder Netzwerkverbindungen, aber es ist einfacher praktischer Weg, um Ihr problem zu beheben.
Wenn der code laufen soll als daemon, aber das ist wirklich nicht (so wie deine), es ist ein wrapper, der macht aus jedem Programm in daemon. Überraschung - dieser wrapper wird als
daemon
! Es hat eine Menge von Optionen, die wahrscheinlich am wichtigsten ist für Sie die option, um das Dienstprogramm automatisch neu gestartet wird, sollte er je sterben aus irgendeinem Grund.Wenn dieser Befehl nicht installiert ist auf Ihrem Ubuntu, nur
sudo apt-get install daemon
, undman daemon
um loszulegen.daemon(3)
library-Funktion.Gut, es gibt ein paar Dinge zu beachten, über SIGHUP. Erstens, Ihre Herkunft ist aus dem Konzept ein hang-up, d.h. Verlust der Verbindung zu einer Konsole, über so etwas wie ein modem. Im modernen Sprachgebrauch bedeutet dies im Allgemeinen, dass es verloren hat seiner controlling tty. Es sei denn, Sie gekümmert haben, trennen Sie Ihr tty-Gerät, jedes Programm gestartet, in einem bestimmten terminal erhält ein SIGHUP, wenn das terminal geschlossen wird. Sehen hier für details, wie dies zu tun in Ihrem Programm. Weitere Optionen sind:
screen
odertmux
nohup
oder einige andere daemonising RahmenDie andere Möglichkeit ist, etwas absichtlich senden Sie Ihren Prozess ein SIGHUP, die "tradition" wird oft verwendet, um signal-ein Prozess, es sollte re-Lesen Sie Ihre Konfiguration.