1
我一直在使用以下模板來處理並行處理「事物」的所有分支/進程需求。它主要通過一切我需要處理,在時間條目的X個循環和時間的任何條目需要太長時間:我怎樣才能殺死在我的Perl腳本中花費太長時間的分叉進程而不超時分叉進程?
my $num_procs = 0;
foreach my $entry (@entries) {
$num_procs++;
if($num_procs == $MAX_PROCS) {
wait();
$num_procs--;
}
my $pid = fork();
if($pid == 0) {
process($entry);
}
}
for (; $num_procs>0; $num_procs--) {
wait();
}
「過程」例行具有以下模板,超時過程:
my $TIMEOUT_IN_SECONDS = 15;
eval {
local $SIG{ALRM} = sub { die "alarm" };
alarm($TIMEOUT_IN_SECONDS);
# do something
alarm(0);
};
if ([email protected]) {
# do something about the timeout
}
我現在遇到了一個問題,因爲這個孩子不能工作,因爲這個孩子不能工作。 (我認爲這是由於NFS的I/O阻塞問題)我想,解決這個問題的唯一方法是讓父母自己殺死孩子。
有沒有辦法修改我的代碼來做到這一點?
看到這個S.O.問題[這裏](http://stackoverflow.com/questions/15012289/perl-fork-and-kill-kill0-pid-always-returns-1-and-cant-kill-the-child/15013244#15013244)。這應該給你足夠多的自己去實現這個。 – chrsblck 2013-04-05 19:35:23
可能重複[如何從Windows上的Perl CGI腳本分叉後臺進程?](http://stackoverflow.com/questions/45792/how-can-i-fork-a-background-processes-from- A-Perl的CGI腳本式窗口) – 2013-04-05 19:37:00