Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

parent und child

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
A-r-e-s
Newbie
Newbie
Beiträge: 2
Registriert: 5. Nov 2004, 09:17

parent und child

Beitrag von A-r-e-s »

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
Benutzeravatar
nobbiew
Hacker
Hacker
Beiträge: 497
Registriert: 1. Mär 2004, 23:26

Beitrag von nobbiew »

Si, da musst du forken. Nur so kann perl parallel arbeiten. Sonst arbeitet perl, genauso wie die Shell sequentiell.
A-r-e-s
Newbie
Newbie
Beiträge: 2
Registriert: 5. Nov 2004, 09:17

Beitrag von A-r-e-s »

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
Benutzeravatar
nobbiew
Hacker
Hacker
Beiträge: 497
Registriert: 1. Mär 2004, 23:26

Beitrag von nobbiew »

Schlag mal die Doku zu waitpid nach. Ich denke damit kommst du weiter.
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3174
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

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
Antworten