[Perl] Maximaal aantal forks tegelijkertijd

Pagina: 1
Acties:

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 24-05 12:18

TrailBlazer

Karnemelk FTW

Topicstarter
ik moet een groot aantal routers benaderen vanuit een script. Onder andere moeten de configs van deze routers mbv TFTP worden gebackuped naaar een tftp server. Gemiddeld duurt dit zo'n 30 seconden per router. Gezien het grote aantal routers wil ik dit graag forken.
Als ik alle routers tegelijkertijd ga benaderen krijg ik een aantal problemen TFTP servers die het niet trekken management verbindingen die vollopen etc etc. Ik wil dus een maximaal aantal child processen (zeg 20) hebben tegelijktijd. Tot nu toe heb ik het volgende in elkaar geklust
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
foreach $router (keys(%ips)) {
print "$router\n";
$newpid=fork();
if ($newpid == 0) {
#it is a child
$ip=$ips{$router};
print "child $$ is going to ping $ip\n";
$ip=$ips{$router};
#meer dingen nog per router toevoegen
$ping=`ping $ip`;
if ($ping=~/alive/) {
 
 print "$router ok\n";
 }
 else {
 
 print "$router nok\n";
 }


exit;
}
else {
#it is the mother
push(@kids,$newpid);
}

}

%ips is een hash met key/value routernaam ip. Dit fork principe werkt in ieder geval. ik zie alleen dus niet hoe ik moet beperken dat er maar 20 processen tegelijktijd opgestart mogen worden. Wie kan me op weg helpen verder

[ Voor 3% gewijzigd door TrailBlazer op 06-01-2004 08:26 ]


  • Juup
  • Registratie: Februari 2000
  • Niet online
Je zou een counter bij kunnen houden die je ophoogt als je forkt en verlaagt als je child exit. Dan doe je een while ($counter > 20) { sleep 1; } ofzo.

Het is trouwens Perl en niet PERL.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 24-05 12:18

TrailBlazer

Karnemelk FTW

Topicstarter
hoe zou ik dan in de gaten moet houden als een child exit. Vast iets met waitpid maar dat snap ik nog niet helemaal.

Tja zit wat in dat het Perl is ik zal het alleen maar niet melden in SM beetje onbenullig dit