Hallo,
ich habe ein Problem mit dem Abfangen von dem Signal SIGCHLD, das ausgelöst wird, wenn sich ein Kindprozess beendet.
Ich habe gelesen, dass das Signal "normalerweise ignoriert wird". Steht zumidnest hier:
http://linuxreviews.org/man/signal/index.html.de
Ok, dann muss man wohl dieses Signal stets "freigeben", oder?
Zumindest hab ich das Problem, dass es ohne meinem Versuch das Signal freizugeben nicht klappt, aber auch mein Freigeben scheint falsch zu sein.
Ich möchte also das Singal SIGCHLD per Signalhandler Funktion abfangen. Aber die Funktion wird nicht ausgeführt, obwohl ich den Kindprozess per exit(0) beende. Dieser wandert in der Prozesstabelle dann als Zombie herum.
Übrigens funktioniert der Signalhandler, wenn ich SIGINT abfange.
ich habe ein Problem mit dem Abfangen von dem Signal SIGCHLD, das ausgelöst wird, wenn sich ein Kindprozess beendet.
Ich habe gelesen, dass das Signal "normalerweise ignoriert wird". Steht zumidnest hier:
http://linuxreviews.org/man/signal/index.html.de
Ok, dann muss man wohl dieses Signal stets "freigeben", oder?
Zumindest hab ich das Problem, dass es ohne meinem Versuch das Signal freizugeben nicht klappt, aber auch mein Freigeben scheint falsch zu sein.
Ich möchte also das Singal SIGCHLD per Signalhandler Funktion abfangen. Aber die Funktion wird nicht ausgeführt, obwohl ich den Kindprozess per exit(0) beende. Dieser wandert in der Prozesstabelle dann als Zombie herum.
Übrigens funktioniert der Signalhandler, wenn ich SIGINT abfange.
Code:
void init_signal_handler(int signal)
{
struct sigaction sa;
sigset_t sigmask;
Sigemptyset(&sigmask);
Sigaddset(&sigmask, SIGCHLD);
Sigprocmask(SIG_UNBLOCK, &sigmask, NULL);
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sig_child_handler;
sa.sa_mask = sigmask;
Sigaction(signal, &sa, NULL);
}