Мне трудно справиться с этой проблемой, но я сузил ее до использования XML :: LibXML после того, как сделал форк в Perl. Я использую Strawberry Perl 5.12.0 в Windows XP и XML :: LibXML 1.70.
У меня есть сценарий, в котором мне нужно запустить несколько процессов одновременно, взять вывод 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 (и у него ничего не будет в дочернем элементе), он будет успешно работать.
Кто-нибудь знает, что может быть причиной и как это исправить?