Gestion des childs - Besoin d'aides :) [Fork] - Perl - Programmation
Marsh Posté le 30-11-2002 à 16:31:39
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
Marsh Posté le 27-11-2002 à 22:39:40
j ai code un ti demon qui fais des requetes snmp sur une liste d'hosts
marche tres bien mais le truc c k il ne traite qu'un host a la fois
j aurai voulu l ameliorer en faisant des fork pour lance plusieurs requete en parallele.
en faite g ma liste d host ds un array
un truc du style:
while () {
foreach (@liste) {
if ($pid = fork) {
wait;
sleep 60;
}
defined($pid) || die "fork impossible\n";
..
le fiston fais ses requetes snmp..
..
exit;
}
}
maintenant vu que ca doit boucler ttes les 60s, comment je peut faire pour eviter par exemple que 2 requetes se fasse sur le meme host ?
un autre truc aussi
la actuellement en fait je vais creer autant de process fils que d hosts ds la liste.
comment faire pour par exemple les faire de 5 en 5
style il prend les 5 premiers les tests, ensuites les 5 suivant...etc
merci d'avance pour votre aide
Message édité par djtoz le 30-11-2002 à 16:37:23