我有一个Perl插件需要一段时间才能完成操作。该插件通常通过网络从CGI界面启动,该界面应该在后台发送并立即打印消息。不幸的是,我找不到一种方法来做到这一点。我的意思是CGI正确启动插件,但它也等待它完成,我不想发生。我试用&,与叉,与detach,即使Proc::Background,至今没有运气。我很确定这个问题与CGI有关,但我想知道为什么,如果可能的话解决这个问题。以下是我尝试过的代码,请记住所有方法在控制台上都很好用,这只是CGI造成的问题。如何分离CGI中的线程?
# CGI
my $cmd = "perl myplugin.pl";
# Proc::Background
my $proc = Proc::Background->new($cmd);
# The old friend &
system("$cmd &");
# The more complicated fork
my $pid = fork;
if ($pid == 0) {
my $launch = `$cmd`;
exit;
}
# Detach
print "Content-type: text/html\n\n";
print "Plugin launched!";
我知道有StackOverflow上一个similar question,但你可以看到它并没有解决我的问题。
是什么* “至今没有运气” *是什么意思?你有错误吗?什么错误?你知道'perl myplugin.pl'是否正在执行吗?你怎么知道的? – pilcrow
目前还没有运气,我的意思是它等待_myplugin.pl_完成。插件正在执行,这不是问题。 – raz3r
非常基本的'$ cmd&'适合我,即CGI程序不会等待'myplugin.pl'完成。提供关于您的CGI执行环境及其配置的更多细节。请注意,您需要提供足够的信息以[重现问题](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmehow)。 – daxim