lancer 2 commandes simultanement en perl - Perl - Programmation
Marsh Posté le 25-06-2004 à 18:21:46
tu peut soit forker, soit utiliser une petite subtilité de system (non documenté) :
system(1, $cmd);
qui lance ta commande et retourne immediatement (mais bon tu peux pas recuperer le resultat...)
en fait je ne suit meme pas certainq ue ca marche avec autre chose qu'activePerl
Marsh Posté le 26-06-2004 à 00:04:24
pospos a écrit : tu peut soit forker, soit utiliser une petite subtilité de system (non documenté) : |
jcrois que ca fonctionne ta 2e méthode
yaura bien un petit délai entre les 2 commandes, mais minime
Marsh Posté le 28-06-2004 à 11:32:07
comment dois je faire pour forker??
je ne sais pas comment faire...
Marsh Posté le 28-06-2004 à 11:38:20
ReplyMarsh Posté le 28-06-2004 à 11:48:49
merci, je m'y connais pas des masses en perl, il n'y aurait pas qlq de plus simple ou plus comprehensible?
Marsh Posté le 28-06-2004 à 12:02:22
www.google.com
allez fait un effort un peu...
http://www.rocketaware.com/perl/perlfunc/fork.htm
Marsh Posté le 28-06-2004 à 12:35:02
j'ai testé avec le fork mais pour que le deuxième programme puisse se lancer je suis obligé d'arreter le premier. les deux ne s'execute pas en même temps...
Marsh Posté le 28-06-2004 à 16:00:56
install Proc::Simple, c'est une interface simple pour le forck
au fait, tu es sous windows ou unix?
Marsh Posté le 28-06-2004 à 17:55:03
j'ai installé le paquet Proc::simple,
et j'ai l'impression que ça ne change rien voila ce queje fais dans le script:
#!cperl/bin/perl -w
print ("Rentrez votre adresse multicast:" );
@adrIn = ("233.60.197.5", "233.60.197.6", "233.60.197.48" );
$votre_adressemulticast = <STDIN>;
print ("l'adresse multicast est: $votre_adressemulticast\n" );
$SIG{CHLD} = sub { wait };
unless ($pid = fork) {
unless (fork) {
exec `vlc -vvv udp://"@"$votre_adressemulticast)`;
print ("vlc est lance" );
#die "no exec";
##or
#exec `vlc -vvv udp://"@"$votre_adressemulticast)`;
exec `ethereal -k`;
exit 0;
}
exit 0;
}
waitpid($pid,0);
Marsh Posté le 29-06-2004 à 00:28:56
pourkoi tu fais deux fork à la suite?
fait ca avec Proc::Simple!
regarde le synopsis:
http://search.cpan.org/~mschilli/P [...] /Simple.pm
Marsh Posté le 29-06-2004 à 11:28:26
en faite je me suis dit que :
- si je fais un fork
- et que dans le processus pere j'execute ethereal
- sinon je suis dans le fils et je fais un sleep et j'execute vlc
mais dans ce cas là comme je mets en pause ethereal je nepeux dc pas récupérer ce que lance mon deuxième programme avec ethereal? est ce que j'ai bien compris? j'ai regardé Proc::simple mais je n'ai pas compris grand chose, dc je ne préfère pas m'aventurer...merci
#!cperl/bin/perl -w
print ("Rentrez votre adresse multicast:" );
@adrIn = ("233.60.x.x", "233.60.x.x", "233.60.x.x" );
print ("choisissez une adresse multicast parmis les suivantes: '@adrIn\n' " );
$votre_adressemulticast = <STDIN>;
print ("l'adresse multicast est: $votre_adressemulticast\n" );
if ($pid = fork) {
system `ethereal -k &`;
#system `vlc -vvv udp://"@"$votre_adressemulticast & `;
}
else {
#wait (5);
sleep (5);
system `vlc -vvv udp://"@"$votre_adressemulticast`;
#system `ethereal -k `;
}
Marsh Posté le 29-06-2004 à 13:43:38
pour le fork fait des test sans lancer de commande (en affichant le PID par exemple) pour voir ou ca deconne (j'ai pas envi de relir ton truc la...)
mais visiblement la tu ne recupere pas la sortie de tes commandes
attend mais la je comprend pas ce que tu fais: tu melange system et `` ??
la tu va executer ce que te retourne le prog entre `` !!
bon, si tu n'utilise pas la sortie de tes execution pourkoi tu ne ferais pas simplement
system(1, "vlc -vvv udp......" );
system("ethernet -k....." );
?
Marsh Posté le 30-06-2004 à 10:19:34
merci pour ton indication ça ouvre mes programmes l'un après l'autre mais ethereal ne lit rien.je vais essayer de voir pourquoi
Marsh Posté le 25-06-2004 à 17:49:06
bonjour,
j'ai deux commandes que j'aimerais lancer simultanement dans un script mais je ne sais pas comment le faire.si ce n'est simultanement alors l'une après l'autre, mais il faudrait que la première contine à tourner.
je sais que pour lancer des cmd c'est ainsi:
@cmdvlc=`vlc -vvv udp://"@"$votre_adressemulticast`;
@cmdeth=`ethereal -k`;
je suis obligé d'arreter la première pour ke la 2eme s'execute.
bon merci pour votre aide.