Ich habe ein Perl-Skript, das einen anderen Prozess im Hintergrund starten und beenden muss, ohne darauf zu warten, dass das andere Skript beendet wird. Es gibt viele Threads in StackOverflow, die beschreiben, wie man in Perl wartet oder nicht auf andere Programmiersprachen wartet, aber ich kann nicht die richtige Antwort für Perl finden.Einleiten des nicht wartenden Hintergrundprozesses in Perl
Ich habe ziemlich viel gelesen und dachte, ich würde die richtigen Dinge tun, aber keiner meiner Versuche scheint richtig zu funktionieren. Hier sind alle Variationen habe ich versucht, so weit ohne Erfolg:
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 &|);
mit jedem dieser der Eltern-Prozess weiter zu warten, bis das Kind vor dem Beenden zu beenden. Bitte lassen Sie mich wissen, was ich falsch mache und die richtige Art den Hintergrundprozess zu verändern.
Vielen Dank im Voraus für Ihre Hilfe!
Vollständiger Code zur Fehlersuche. Beachten Sie, dass die API-> Funktion() Anrufe objektorientierte Module unserer Code-Basis für bestimmte Funktionen verwendet werden, die Datenbank-Interaktionen, 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};
}
Der Elternteil wartet auf die IO in dem Kind geschlossen werden. Verwenden Sie Proc :: Daemon und den 'perldoc -q-Daemon' (oder sehen Sie sich zumindest an), um die Zuordnung von Eltern zu Kind aufzuheben. – runrig
Sie werden hier irgendeine Antwort "akzeptieren"? – runrig