jetzt habe ich keine Lust mehr zu suchen. Wie kann ich denn nun mit "fork, exec & Co" einen Parent-Prozess als beendet markieren und einen Child-Prozess weiter laufen lassen?
Ich fürchte, *so* geht es überhaupt nicht. Wenn der Child-Prozeß wirklich ein Child-Prozeß ist. bekommt er normalerweise Probleme, wenn sein Parent-Prozeß nicht mehr existiert.
Bei fork () erzeugst Du (unter UNIX) einen solchen child-Prozeß. Im Prinzip wird der Adreßraum des Parent-Prozesses dupliziert und das child springt an eine im Aufruf angegebene Adresse. Wird das Child beendet, dann erhält der Parent automatisch ein SIG_CHILD-Signal - die beiden wissen also noch voneinander.
exec () macht etwas ganz Anderes: Es überschreibt den Adreßraum des vorherigen Prozesses. Während dieser nach system() an der vorherigen Stelle fortgesetzt wird, ist er nach exec() einfach "nicht mehr da". Tatsächlich existiert genau der ursprüngliche Prozeß weiter, führt aber nun eben das neue Kommando aus.
Wie koppel ich nun die beiden Prozesse voneinander ab?
Was Du wahrscheinlich brauchst, ist ein ganz normales Systemkommando, aber mit dem Operator "&" am Ende. Der sorgt dafür, daß der Prozeß vom Parent sauber abgetrennt wird - und dann sollte er auch dessen Ende überstehen.
Auch das Systemkommando "nohup" macht etwas Ähnliches - mit den Details bin ich nicht vertraut. (UNIX-manpages.)
Dazu zu sagen ist, daß ich ActivePerl nutze und das es auf einem NT-Server läuft.
Tja, Windows NT ist nicht UNIX - da gilt wahrscheinlich nichts des oben Gesagten.
Die Sprache ist für das Prozeßmodell des Betriebssystems irrelevant - was ich erzählt habe, geht in Perl oder C oder irgendwas gleichermaßen, wenn das Betriebssystem es unterstützt. Und wenn nicht, dann nicht.
Ich hoffe Mein Problem verständlich geschildert zu haben.
Hast Du (IMHO). Aber was Dein Server genau kann, darüber weiß ich zu wenig.