我有一個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