J'ai un script Perl qui doit lancer un autre processus en arrière-plan et quitter sans attendre que l'autre script se termine. Il y a beaucoup de threads sur StackOverflow qui couvrent comment attendre en Perl ou comment ne pas attendre d'autres langages de programmation, mais je n'arrive pas à trouver la bonne réponse pour Perl.Initialisation du processus d'arrière-plan non-en attente en Perl
J'ai beaucoup lu et je pensais que je faisais les bonnes choses, mais aucune de mes tentatives semblent fonctionner correctement. Voici toutes les variations que je l'ai essayé jusqu'à présent en vain:
system(qq|perl /util/script.pl $id|);
system(qq|perl /util/script.pl $id &|);
exec(qq|perl /util/script.pl $id|);
exec(qq|perl /util/script.pl $id &|);
Avec chacun de ces processus parent continue d'attendre l'enfant à terminer avant de quitter. S'il vous plaît laissez-moi savoir ce que je fais mal et la bonne façon de bifurquer le processus d'arrière-plan.
Merci d'avance pour votre aide!
Code complet pour faciliter le débogage. Notez que les appels API-> Fonction() sont des modules orientés objet de notre base de code utilise pour des fonctions spécifiques que les interactions de base de données, etc:
sub Add {
my $self = shift;
my $domain = shift;
if(!$self->IsValid($domain)) { return; }
my $SQL = qq| insert into domains set added=NOW(),domain=| . API->Database->Quote($domain);
my $sth = API->DatabaseQuery($SQL);
$SQL = qq| select last_insert_id() |;
$sth = API->DatabaseQuery($SQL);
my $id = $sth->fetchrow_array();
my $command = qq|perl /home/siteuser/util/new.pl $id &|;
system($command);
return {'id'=>$id,'domain'=>$domain};
}
Le parent attend la fermeture de l'E/S de l'enfant. Utilisez (ou au moins regardez) Proc :: Daemon et 'perldoc -q daemon' pour savoir comment dissocier le parent de l'enfant. – runrig
Vous allez 'accepter' une réponse ici? – runrig