Привет, у меня есть эта проблема, когда скрипт Perl выдает «Нет дочерних процессов, найденных в» ...
Мой скрипт вызывает несколько разных типов форков, поэтому я попытался реализовать метод реализации perldoc waitpid(), чтобы иметь возможность использовать хэндл как fork, так и exec, и system, и qw.
$SIG{CHLD} = sub {
# don't change $! and $? outside handler
local ($!, $?);
my $pid = waitpid(-1, WNOHANG) > 0;
return if $pid == -1;
return unless defined $children{$pid};
delete $children{$pid};
};
my $pid = fork();
die "cannot fork" unless defined $pid;
if ($pid == 0) {
# ...
exit 0;
} else {
$children{$pid}=1;
# ...
exec($command);
}
С этой частью выполнения кода проблем нет, однако при попытке закрыть CLOSE дескриптора файла возникает сообщение «Не найден дочерний процессор». Может кто-нибудь объяснить мне, как это происходит, так как я действительно хочу глубже понять эту проблему. Должен ли я в конечном итоге пожинать дочерний процесс, разветвленный вызовом OPEN, так что закрытие не знает, как обращаться с дескриптором файла? или, может быть, я 100% off. Любые решения будут оценены
open(RESULTS, "-|", "find $dir\/ -maxdepth 1 -name RESULTS -print0 | xargs -0 cat ") or die $!;
while(<RESULTS>){
if($_ =~ /match/){
print $_;
}
}
close RESULTS;