• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

parent und child

A-r-e-s

Newbie
Ich habe mal eine Frage zum forken.

Und zwar habe ich eine schleife in meinem perl script und da forke prozesse die dann immer ein anderes perl script starten mit anderen parametern.

Der parent beim forken macht nichts und wartet auch nicht bis das kind beendet wurden ist. Das muss doch so sein, wenn man will das alle gleichzeitig ausgeführt werden, wenn er wartet dann stoppt er doch alles und die anderen kindern werden erst ausgeführt wenn das vorherige beendet ist, oder?

Muss ich überhaupt forken um das problem zu lösen?

Wie gesagt ich hab eine schleife und möchte ein programm ausführen mit unterschiedlichen parametern aber das gleichzeitig, alle ausgeführt werden.

der normale system befehl stoppt doch auch den programm ablauf, oder?

Hoffe ihr könnt mir helfen.

MfG
A-r-e-s
 

nobbiew

Hacker
Si, da musst du forken. Nur so kann perl parallel arbeiten. Sonst arbeitet perl, genauso wie die Shell sequentiell.
 
OP
A

A-r-e-s

Newbie
ja ok danke schonmal.
aber wie ist das mit dem problem da mein parent nicht warten kann bis das child verschwindet. sonst ist es ja auch sequntiell und ich bekomme es nicht parallel hin.

zur zeit sieht das ungefähr so aus:

for ($i=0;$i<5;$i)
{
if (defined($pid = fork))
{
if ($pid){}
else {system("./temp.pl $i");last;}
}
else
{
die "Error ... \n";
}
}

die schleife ist natürlich was komplexer und übergibt mehr als nur ein $i wie hier.
aber ist das eine sinnvolle lösung? da ja zombie prozesse entstehen können wenn was im kind schief geht.
Fällt einem da vielleicht nochwas ein, wie man das besser lösen kann?

MfG
A-r-e-s
 
A

Anonymous

Gast
Wenn ich mich noch so wage an die graue Theorie erinnere, dann währe es wohl richtig, wenn du auf jeden einzelnen kind wartest, dazu müsste hinter das ende deiner For Schleife eine neue Schleife, die genau so oft durchlaufen werden müsste wie die erste, in ihr müsstest du warten und evtl. noch die Pid des sich beendeten Kind vergleichen , damit auch alle Prozesse sich schön wieder zurückmelden.
Einfacher ist es manchmal die einzelnen Kind mit maskiertem HUP Signal (zB: nohup als Vorschaltkommando) zu starten. Dann werden sie nicht beendet, wenn parent stirbt und laufen als Zombis weiter. Macht nicht immer Sinn, da die Ein- und Ausgabekanäle, sollten sie noch nicht umgeleitet sein, umgebogen werden, aber es geht.
Hilfe und Hinweise würde ich unter Schlüsselworten wie kill, signal, nohub und trap suchen.

robi
 
Oben