Frank Opper: C: Prozess in Hintergrund verbannen

Beitrag lesen

Hallo Erwin,

der Parent-Prozess läuft in den default-Zweig, wo er mit waitpid() auf eine Statusänderung des Child-Prozesses wartet. Das passiert bei Dir erst dann, wenn der Child-Prozess beendet wird.

Du kannst an waitpid() als 3. Parameter die Option WNOHANG mitgeben. Die Manpage sagt dazu:

WNOHANG         The waitpid() function will not suspend exe-
                cution  of  the calling process if status is
                not immediately available  for  one  of  the
                child processes specified by pid.

Eine bessere, aber kompliziertere Alternative ist es, im Parent einen Signalhandler für SIGCHLD einzubauen und dort den Aufruf von waitpid() durchzuführen. Dann kann waitpid() aus dem default-Zweig raus, und beide Prozesse laufen parallel.

Viele Grüße
Frank