バックグラウンドで別のプロセスを開始し、他のスクリプトが終了するのを待たずに終了する必要がある Perl スクリプトがあります。Perl で待機する方法や、他のプログラミング言語を待機しない方法をカバーする StackOverflow のスレッドはたくさんありますが、Perl の正しい答えを見つけることができないようです。
私はかなり読んで、正しいことをしていると思っていましたが、私の試みはどれも正しく機能していないようです。これまでに試したすべてのバリエーションは次のとおりです。
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 &|);
これらのそれぞれで、親プロセスは終了する前に子プロセスが終了するのを待ち続けます。私が間違っていることと、バックグラウンド プロセスをフォークする正しい方法を教えてください。
よろしくお願いします。
デバッグに役立つ完全なコード。API->Function() 呼び出しはオブジェクト指向モジュールであることに注意してください:
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};
}