Initier des Non-attente de Processus d'arrière-plan en Perl

J'ai un script Perl qui doit lancer un autre processus en arrière-plan et la sortie sans attendre qu'un autre script à la fin. Il y a beaucoup de discussions sur StackOverflow qui traitent de la manière de patienter en Perl ou comment ne pas attendre pour d'autres langages de programmation, mais je n'arrive pas à trouver la bonne réponse pour Perl.

J'ai lu un peu et je pensais que j'était en train de faire les bonnes choses, mais aucune de mes tentatives semblent fonctionner correctement. Voici toutes les variations que j'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 le processus parent continue d'attendre pour l'enfant à terminer avant de quitter. S'il vous plaît laissez-moi savoir ce que je fais mal et le droit chemin à la fourchette les processus d'arrière-plan.

Merci d'avance pour votre aide!


Code complet pour faciliter le débogage. Notez que l'API->Fonction() les appels sont orientées objet, les modules de notre base de code d'usages pour les fonctions spécifiques de la base de données des interactions, 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 est en attente pour les IO chez l'enfant à être fermé. L'utilisation (ou au moins regarder) Proc::Daemon et "perldoc -q démon' sur la façon de dissocier le parent de l'enfant.
Vous allez accepter toute réponse ici?

OriginalL'auteur Russell C. | 2010-12-13