Using waitpid oder sigaction?

7

Ich habe das verstanden: 1) waitpid wird verwendet, um auf den Tod eines Kindes zu warten und dann die SIGCHLD und den Austrittsstatus des Kindes usw. zu sammeln. 2) Wenn wir einen Signal-Handler für SIGCHLD haben, machen wir noch ein paar Dinge, die mit der Säuberung von Kind- oder anderem Zeug zu tun haben (bis zum Programmierer) und machen dann eine Wartepause, damit das Kind nicht Zombie geht und dann zurückkehrt.

Nun, müssen wir in unseren Programmen sowohl 1 als auch 2 haben, wenn wir einen fork / exec machen und das Kind zurückkehrt? Wenn wir beide haben, wird der SIGCHLD zuerst erhalten, so dass der Signalhandler zuerst aufgerufen wird und somit sein waitpid erfolgreich aufgerufen wird und nicht der waitpid im übergeordneten Prozesscode wie folgt:

%Vor%

Schätzen Sie, wenn mir jemand hilft, dies zu verstehen.

    
Vin 23.01.2012, 17:34
quelle

2 Antworten

18
___ qstnhdr ___ Using waitpid oder sigaction? ___ tag123linux ___ LINUX FRAGEN MÜSSEN PROGRAMMIEREN VERWANDT SEIN. Verwenden Sie dieses Tag nur, wenn sich Ihre Frage auf das Programmieren mit Linux-APIs oder das Linux-spezifische Verhalten bezieht, nicht nur, weil Sie Ihren Code unter Linux ausführen. Wenn Sie Linux-Unterstützung benötigen, können Sie https://unix.stackexchange.com oder https://askubuntu.com ausprobieren ___ qstntxt ___

Ich habe das verstanden: 1) waitpid wird verwendet, um auf den Tod eines Kindes zu warten und dann die SIGCHLD und den Austrittsstatus des Kindes usw. zu sammeln. 2) Wenn wir einen Signal-Handler für SIGCHLD haben, machen wir noch ein paar Dinge, die mit der Säuberung von Kind- oder anderem Zeug zu tun haben (bis zum Programmierer) und machen dann eine Wartepause, damit das Kind nicht Zombie geht und dann zurückkehrt.

Nun, müssen wir in unseren Programmen sowohl 1 als auch 2 haben, wenn wir einen fork / exec machen und das Kind zurückkehrt? Wenn wir beide haben, wird der SIGCHLD zuerst erhalten, so dass der Signalhandler zuerst aufgerufen wird und somit sein waitpid erfolgreich aufgerufen wird und nicht der waitpid im übergeordneten Prozesscode wie folgt:

%Vor%

Schätzen Sie, wenn mir jemand hilft, dies zu verstehen.

    
___ tag123operatingsystem ___ Ein Betriebssystem (OS) ist eine Basissoftware, deren Aufgabe es ist, eine abstrakte Schicht zwischen Softwareanforderungen für Ressourcen und der verfügbaren Hardware, Eingabe / Ausgabe, Speicherzuweisung / -zuordnung, Dateisystemen und anderen grundlegenden Aufgaben eines Geräts zu bilden (nicht unbedingt ein Computer) sollte tun. ___ answer8976137 ___

Sie müssen die wartenden Syscalls wie waitpid oder Freunde anrufen - zB SIGCHLD , wie auch immer Sie könnten habe Zombie-Prozesse .

Sie könnten mit waitpid umgehen, um benachrichtigt zu werden, dass ein Kind beendet wurde (oder gestoppt wurde, usw.), aber Sie müssen später darauf warten.

Signalhandler können nur eine kleine Menge von async-signalsicheren Funktionen aufrufen (siehe Signal (7) für mehr). Guter Rat ist, einfach eine SIGCHLD -Flagge zu setzen und sie an späteren und sichereren Orten zu testen.

    
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___
R.. 23.01.2012 18:11
quelle
1

Sie müssen die wartenden Syscalls wie waitpid oder Freunde anrufen - zB wait4 , wie auch immer Sie könnten habe Zombie-Prozesse .

Sie könnten mit SIGCHLD umgehen, um benachrichtigt zu werden, dass ein Kind beendet wurde (oder gestoppt wurde, usw.), aber Sie müssen später darauf warten.

Signalhandler können nur eine kleine Menge von async-signalsicheren Funktionen aufrufen (siehe Signal (7) für mehr). Guter Rat ist, einfach eine volatile sig_atomic_t -Flagge zu setzen und sie an späteren und sichereren Orten zu testen.

    
Basile Starynkevitch 23.01.2012 17:45
quelle

Tags und Links