PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann man einen Kind-Prozess vom Eltern-Prozess trennen?



hiTCH-HiKER
09.04.05, 11:35
Ich habe folgendes Problem:

Aus einer Anwendung wird ein Skript (Perl) gestartet, welches wiederum zeitaufwändige Kindprozesse generiert, die asynchron im Hintergrund laufen sollen.
Leider wartet die Anwendung aus der ich das Skript starte immer so lange, bis sämtliche Kindprozesse des Skripts beendet sind. Da hilft kein "grandchild" mit Beenden des Prozesses in der Mitte und auch "nohup &" hilft nicht, da letztendlich ja doch alle diese Prozesse in der Familie des Skripts leben.

Gibts es unter AIX/Perl eine Möglichkeit einen Prozess von seinen Eltern zu trennen, so dass die Anwendung die mein Skript startet weiter läuft?

x3ron
10.04.05, 10:27
wenn der elternprozess ein kind nicht vollständig beendet, kommt es ja zu einem zombie-prozess... von daher frage ich mich ob das überhaupt möglich ist was du da vor hast...

tictactux
10.04.05, 13:53
Hi,
schau mal in die perlfaq8, Frage "How do I start a process in the background?",
Stichwort "double fork" (+wrapper-Script?)
Dort stehen auch Verweise zu IPC::Run und Alternativen.

perldoc perlfaq8 oder man perlfaq8

HTH
Wolfgang

hiTCH-HiKER
11.04.05, 10:05
Hi,
schau mal in die perlfaq8, Frage "How do I start a process in the background?",
Stichwort "double fork" (+wrapper-Script?)
Dort stehen auch Verweise zu IPC::Run und Alternativen.

perldoc perlfaq8 oder man perlfaq8

HTH
Wolfgang


Folgende Methoden hab ich probiert, allerdings ohne Erfolg:

- double fork
- setsid
- system ("sleep 200 &")

Zwar ist dann der abgesetzte sleep-Befehl ein Kind von init, allerdings hängt die Anwendung die das Perl-Skript startet trotzdem so lange, bis ich den sleep-Befehl beende.
Woran kann das liegen?
Was meintest du mit "wrapper-Skript"?

tictactux
11.04.05, 13:18
Was meintest du mit "wrapper-Skript"?
ein zusätzliches Perl-Skript, dem Du den Namen des Ursprünglichen gibst,
und welches das (umbenannte) Originalskript dann startet

Die manpage perlipc(1) (->"Complete Dissociation of Child from Parent") könnte
noch nützlich sein.