我花了很强的时间处理这个问题,但我把这个问题缩小到使用XML:LibXML,在我去Perl做过 for后。 视窗XP和XML:LibXML 1.70。
我有一份文字,我需要同时管理几个进程,掌握XML的产出并处理结果。 如果我用太阳能机器操作,那就算是罚款,我没有问题。 然而,如果我在Windows上运行,我就有一个坠毁的窗口,称其永久。 外部遇到问题,需要结束。
这里是产生错误的样本方案:
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;
If I only have one process, or if I don t fork, then it will work successfully. If I remove the load_xml call (and have nothing in the child), then it will work successfully.
Does anyone know what may be causing this and how to fix it?