У меня есть сценарий 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};
}