perl processus d'arrière-plan
Je suis en train de lancer un processus en arrière-plan en perl. J'ai créer un processus fils, qui est utilisé pour appeler un autre script perl. Je veux l'exécuter en quelques lignes de code, parallèlement à ce processus enfant. Et après le processus de l'enfant est fait.Je veux imprimer une ligne de code.
Script principal
#!/usr/bin/perl
$|=1;
print "before the child process\n";
my $pid = fork();
if (defined $pid)
{
system("perl testing.pl");
}
print "before wait command\n";
wait();
print "after 20 secs of waiting\n";
testing.pl
#!/usr/bin/perl
print "inside testing\n";
sleep(20);
Résultats attendus
avant le processus de l'enfant avant d'attendre de commande (faut attendre 20 secondes et ensuite l'imprimer) après 20 secondes d'attente
Si ce que vous voir à la place? Il est intéressant de noter que tout ce qui est après le
u r droit.. c'est de l'impression à deux reprises. comment puis-je contrôler?
rêveur: C'est parce que
Enlevé le bug que vous avez ajoutés dans un montage.
même après qui est fixe, le code après, il est exécuté à la fois le parent et l'enfant, car le
system
appel sera exécuté par , le parent et l'enfant.u r droit.. c'est de l'impression à deux reprises. comment puis-je contrôler?
rêveur: C'est parce que
0
defined
valeur en Perl.Enlevé le bug que vous avez ajoutés dans un montage.
même après qui est fixe, le code après, il est exécuté à la fois le parent et l'enfant, car le
if
branche contient pas de exit
.OriginalL'auteur dreamer | 2012-11-23
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup de problèmes avec votre script. Toujours:
local
ising variables spéciales est une bonne pratique. Seulement une variable contenant la valeur spécialeundef
retourne la valeur false pourdefined
. Donc, tous les autres de la valeur (même un0
; ce qui est le cas ici) renvoie la valeur true pourdefined
. Dans l'autre script, le shebang est faux.OriginalL'auteur Alan Haggai Alavi
La “Processus d'arrière-plan” de la section de la perlipc documentation lit
Ajouter une esperluette à l'argument de
system
dans votre programme peut grandement simplifier votre programme principal.Greg Bacon a été suggérant que comme une alternative à l'utilisation de
fork
.Je n'était pas claire. Voir mise à jour de réponse.
OriginalL'auteur Greg Bacon
fork
valeur de retour de la manipulation est un peu délicat, en effet.Article récent de Aristote dispose d'un agréable et concise de bifurquer idiome, ce qui, dans votre cas, ressemble:
Attention à
exec $^X => '...'
ligne: le $^X variable contient le chemin complet vers l'exécutable Perl courant, de sorte que le "droit Perl version" seront garantis. Aussi,system
appel est inutile lorsque vous êtes pré-fork.OriginalL'auteur creaktive