2012-11-12 10 views
9

Mamy około 40 komputerów z identycznym sprzętem i oprogramowaniem. Wszystkie uruchamiają Ubuntu 11.10. Wszystkie mają tylko jedno konto użytkownika do zalogowania. Plik .profile jest skonfigurowany do uruchamiania procesu demona. Kod demona jest napisany w C.Co może spowodować wygenerowanie SIGHUP?

Raz na kilka tygodni otrzymujemy raport, że demon już nie działa. Nie dzieje się to na wszystkich komputerach, ale tylko na jednym lub dwóch. Nie możemy odtworzyć problemu konsekwentnie.

Patrząc na kod, aplikacja kończy pracę, gdy otrzyma SIGHUP lub SIGTERM.

Jak rozumiem, SIGHUP jest generowany, gdy użytkownik się wylogowuje. W naszym przypadku użytkownik nigdy się nie wyloguje. Zastanawiam się, czy możliwe jest, że SIGHUP mógł zostać wygenerowany z jakiegoś innego powodu. Każda inna myśl byłaby doceniona.

+0

Czy próbowałeś zalogować się do demona, aby sprawdzić, który z 2 sygnałów, jeśli są przyczyną? Wydaje się, że SIGHUP jest wyzwalany, jeśli terminal sterujący jest zamknięty, ale jeśli korzystasz z kompilacji serwerów i tylko z jednego głównego połączenia, to chyba różnica jest dyskusyjna. –

+0

Sygnały mogą być również wysyłane ręcznie. Kto wie? – arkascha

Odpowiedz

7

Sygnały można wysyłać za pomocą narzędzia kill lub zabić syscall. Oczywiście, możesz spróbować dowiedzieć się, kto wysyła ten sygnał lub odłączać terminale lub połączenia sieciowe, ale istnieje prostszy praktyczny sposób na rozwiązanie problemu.

Kiedy kod ma działać jako demon, ale tak naprawdę nie jest (tak jak twój), istnieje opakowanie, które może zamienić dowolny program w demona. Zaskoczenie - to opakowanie nazywa się daemon! Ma wiele opcji, prawdopodobnie najważniejsze dla Ciebie, opcję automatycznego ponownego uruchomienia narzędzia, jeśli kiedykolwiek umrze z jakiegokolwiek powodu.

Jeśli to polecenie nie jest zainstalowane w systemie Ubuntu, wystarczy sudo apt-get install daemon i man daemon, aby rozpocząć.

+1

i istnieje również funkcja biblioteki 'daemon (3)'. –

+0

Dziękuję za pomoc. Kod jest napisany, aby działał jako demon (używając fork, setsid, etc). Jednak przyjrzę się również narzędziu demona zewnętrznego. – Peter

11

Cóż, jest kilka rzeczy do zapamiętania na temat SIGHUP. Po pierwsze pochodzi z koncepcji zawieszenia, tj. Utraty połączenia z konsolą przez coś podobnego do modemu. We współczesnym języku oznacza to ogólnie, że stracił kontrolę nad tty. Jeśli nie odłączysz się od swojego tty, każdy program uruchomiony w danym terminalu otrzyma SIGHUP po zamknięciu terminalu. Aby uzyskać szczegółowe informacje, jak to zrobić w swoim programie, patrz: here. Inne opcje obejmują:

  • uruchomić program wewnątrz '' ekran '' lub '' tmux ''
  • uruchomić program z '' nohup '' lub innej ramach daemonising

Inny możliwością jest coś, co celowo wysyła twój proces SIGHUP, który przez "tradycję" jest często używany do sygnalizowania procesu, że powinien ponownie przeczytać jego konfigurację.

Powiązane problemy