这个问题很老了,接受的答案是正确的。但是,我刚刚开始工作,并想我会添加更多关于如何为需要它的人完成它的细节。
以下代码存在于一个非常大的 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
在脚本顶部添加,镜像代码并更改程序的路径和名称,您应该一切顺利。