Peut-on récupérer les STDOUTS d'executables lancés grâce à fork?
Bonjour,
j'ai posté une discussion analogue il y a deux semaines mais je me suis trompé de forum et/ou je ne suis vraiment pas clair, vu le nombre de réponse (=0).
Je souhaite lancer plusieurs fois en parallèle un exécutable grâce à fork.
Cet exécutable me prévient de l'avancée des calculs en affichant régulièrement des points dans la console...
Je voudrais bien récupérer "court-circuité" les sorties standards des fils,
compter les points, et par exemple afficher un point quand tous les fils en ont envoyé un.
Est-ce que cela est possible?
Si oui, quelqu'un pourrait-il m'indiquer les fonctions à utiliser pour gérer les entrées/sorties?
Je colle mon bout de code comme base, mais évidemment ça ne fait pas le travail.
(il récupère bien les sorties standards mais une fois l'executable terminée...je devrais surement utiliser exec()...)
Merci beaucoup!
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
| #!/usr/bin/perl
use strict;
my $File=shift;
my $num_threads=8;
my @pid;
for(my $i=0;$i<$num_threads;$i++){
pipe(FAT_R,SON_W);
if($pid[$i]=fork) {
close(SON_W);
while(<FAT_R>){
print $_;
}
close(TOTO);
}else{
close(FAT_R);
my @command("le_prog","$file");
print SON_W `@command`;
exit(0);
}
}
foreach(@pid){
waitpid($_,0);
} |