Signalhandler an Childprozesse vererben
-
Hallo,
ich habe hier einen kleinen Server der ein Verzeichnis überwachen soll um auf Änderungen an Dateien reagieren zu können, so eine Art "Hot Deploy".
Ausgeschnitten und vereinfacht sieht das so aus:
In der Initialisierungsphase des Servers registriere ich mich für die Notifizierung auf Änderungen.
... struct sigaction act; int fd; act.sa_sigaction = signalHandler; sigemptyset(&act.sa_mask); act.sa_flags = SA_SIGINFO; sigaction(SIGRTMIN + 1, &act, NULL); fd = dirfd(m_directory); fcntl(fd, F_SETSIG, SIGRTMIN + 1); // We want to be notified if a file is created or changed fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT); ...
Diese Funktion wird als Signalhandler registriert:
void signalHandler(int sig, siginfo_t *si, void *data) { DEBUG("File changed/created"); }
Soweit funktioniert das alles.
Mache aber den Server über fork/chdir/umask zum Daemon werde ich nicht mehr über signalHandler benachrichtigt, obwohl Signalhandler eigentlich vererbt werden sollten.
Jemand eine Idee?
Danke.