我有一个 Perl 脚本,需要在后台启动另一个进程并退出,而无需等待其他脚本完成。StackOverflow 上有很多线程涉及如何在 Perl 中等待或如何不等待其他编程语言,但我似乎无法为 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};
}