Этот вопрос очень старый, и принятый ответ правильный. Тем не менее, я просто заставил это работать и решил добавить еще несколько подробностей о том, как это сделать, для всех, кому это нужно.
Следующий код существует в очень большом Perl CGI-скрипте. Эта конкретная подпрограмма создает билеты в нескольких системах продажи билетов, а затем использует возвращенные номера билетов для автоматического вызова через сервисы Twilio. Вызов занимает некоторое время, и я не хотел, чтобы пользователям CGI приходилось ждать, пока вызов не закончится, чтобы увидеть результат их запроса. Для этого я сделал следующее:
(All the CGI code that is standard stuff. Calls the subroutine needed, and then)
my $randnum = int(rand(100000));
my $callcmd = $progdir_path . "/aoff-caller.pl --uniqueid $uuid --region $region --ticketid $ticketid";
my $daemon = Proc::Daemon->new(
work_dir => $progdir_path,
child_STDOUT => $tmpdir_path . '/stdout.txt',
child_STDERR => $tmpdir_path . '/stderr.txt',
pid_file => $tmpdir_path . '/' . $randnum . '-pid.txt',
exec_command => $callcmd,
);
my $pid = $daemon->Init();
exit 0;
(kill CGI at the appropriate place)
Я уверен, что случайное число, сгенерированное и прикрепленное к pid, излишне, но я не заинтересован в создании проблем, которых очень легко избежать. Надеюсь, это поможет кому-то, кто хочет сделать то же самое. Не забудьте добавить use Proc::Daemon
вверху вашего скрипта, отразить код и изменить пути и имена вашей программы, и вам будет хорошо идти дальше.