У меня есть сценарий Perl, который должен запустить другой процесс в фоновом режиме и выйти, не дожидаясь завершения другого скрипта. Есть много потоков на StackOverflow, которые покрывают, как ждать на Perl или как не ждать других языков программирования, но я не могу найти правильный ответ для 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};
}
Родитель ожидает, когда IO в ребёнке будет закрыт. Используйте (или, по крайней мере, посмотрите) Proc :: Daemon и «perldoc -q daemon» о том, как отделить родителя от дочернего. – runrig
Вы собираетесь «принять» любой ответ здесь? – runrig