こんにちは私は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%オフです。任意の解決策をいただければ幸いです
open(RESULTS, "-|", "find $dir\/ -maxdepth 1 -name RESULTS -print0 | xargs -0 cat ") or die $!;
while(<RESULTS>){
if($_ =~ /match/){
print $_;
}
}
close RESULTS;