我很難解決這個問題,但是我已經將它縮小到使用XML :: LibXML完成Perl的分支之後。我在Windows XP上運行Strawberry Perl 5.12.0,以及XML :: LibXML 1.70。爲什麼Perl在fork後使用LibXML時會崩潰?
我有一個腳本,我需要同時運行多個進程,接受XML輸出並處理結果。如果我在Solaris機器上運行它,它運行得很好,我沒有問題。但是,如果我在Windows上運行此操作,則會看到一個崩潰窗口,指出'perl.exe遇到問題並需要關閉。
下面是一個示例程序,將產生錯誤:
use strict;
use warnings;
use XML::LibXML;
use Try::Tiny;
my $cmds = ['cmd1', 'cmd2'];
my @pids =();
foreach my $cmd (@{$cmds}) {
my $pid = fork();
if ($pid) {
# parent
push (@pids, $pid);
} elsif ($pid == 0) {
XML::LibXML->load_xml(string=>'<root />'); # <-- this will crash it
exit 0;
}
}
foreach my $ch_pid (@pids) {
try {
waitpid($ch_pid, 0);
} catch {
carp("Error on waitpid: $!");
};
}
exit 0;
如果我只有一個過程,或者如果我不叉,那麼它會成功運行。如果我刪除了load_xml調用(並且沒有任何內容),那麼它將成功運行。
有誰知道可能是什麼原因導致這種情況,以及如何解決它?
我無法在Windows 7的activeperl 5.12.2構建1202複製此行爲 – Zaid