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