sa_flags

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

sa_flags
Ich habe das sa_flags von der SIGCHLD-handler als SA_SIGINFO gesetzt, damit ich Informationen ueber den Prozess, der das Signal erzeugt, bekomme. Aber der Comiler kennt das siginfo_t structur nicht. Kann jemand mir sagen, wo kann das Problem liegen? Danke!
:listen:


Wahrscheinlich ist’s nicht im POSIX oder sonstwas…


/usr/include/signal.h

    204 # ifdef __USE_POSIX199309
    205 /* We need `struct timespec' later on.  */
    206 #  define __need_timespec
    207 #  include <time.h>
    208 
    209 /* Get the `siginfo_t' type plus the needed symbols.  */
    210 #  include <bits/siginfo.h>
    211 # endif
    212 

die zeilenangaben sind aus signal.h
davor steht übrigens noch ein “#ifdef __USE_POSIX”.

dazu auch man sigaction unter “NOTES”
POSIX.1-1990 only specified SA_NOCLDSTOP. POSIX.1-2001 added SA_NOCLD-WAIT, SA_RESETHAND, SA_NODEFER, and SA_SIGINFO. Use of these latter values in sa_flags may be less portable in applications intended forolder Unix implementations.

Support for SA_SIGINFO was added in Linux 2.2.

es scheint also, dass SA_SIGINFO nicht automatisch vorhanden ist, da es sich um eine “neuere” erweiterung handelt. bleibt also die frage, ob wir das benützen dürfen…


das mit der siginfo wuerde ich auf jeden Fall sein lassen (selbst wenn’s irgendwo laeuft).
Wenn man ein SIGCHLD bekommt weiss man ja auf jeden Fall, dass sich irgendwas
mit den kids getan hat. Und wenn man dann waitpid aufruft, bekommt man ja
zurueck, welchem Prozess was zugestossen ist.

Und bei der Gelegenheit dran denken, dass im Ernstfall auch mehrere Kinder mal
sterben koennen, waehrend man im sigchld-handler drin ist (und das SIGCHLD
maskiert ist). Dabei koennen einem SIGCHLD-Signale verloren gehen.
Deshalb unbedingt waitpid in einer Schleife aufrufen, bis kein ZOMBIE mehr da ist
(Option WNOHANG nicht vergessen!).