bon j'ai avance
j'explique plus en detail ou j'en suis et ce que je voudrai bien faire
donc actuellement je gere le nombre de childs simultanes que je lance pour faire les requetes snmp
voila ma methode:
les hosts a interoger sont ds le tableau @hosts.
$$conf{childs} contient le nbr de childs a lance en parallele.
$$conf{interval} contient le nbr de seconde a attendre avant de relance un check de tous les hosts.
my $i = 0;
while () {
foreach $ligne (0..$#{@$hosts}) {
$i++;
if ($i == $$conf{childs}) {
map {waitpid($_, 0)} (@pid);
undef @pid;
$i = 1;
}
### le papa ###
if ($pid = fork) {
push @pid, $pid;
}
### le fiston ###
else {
defined($pid) || die "fork a foire: $!\n";
...
requetes snmp...
...
exit;
}
}
map {waitpid($_, 0)} (@pid);
sleep "$$conf{interval}";
}
bon la actuellement ca fonctionne tres bien.
seulement c pas tres optimise.
c'est a dire qu'au depart je prend $$conf{childs} hosts parmis ma liste d'hosts, puis j'attends qu'il meurt tous pour a nouveau en prendre $$conf{childs} suivant ds la liste.
ainsi de suite...
ce que je voudrais faire c'est que par exemple si je fixe $$conf{childs} a 5 childs, j'en prends 5 au debut mais des que y'en a 1 qui est termine, au lieu d'attendre que tous meurt pour continuer ds la liste d'hosts, je voudrai en demarre 1 nouveau.
de sorte que j'ai en permanence 5 childs lance.
je sais pas si je suis assez clair
mais si vous voulez plus d'explication, n'hesitez pas.
merci d'avance pour votre aide
Message édité par djtoz le 30-11-2002 à 16:35:57