モジュールを見ていAnyEvent::Fork
ます。並行して (一度に 6 つ) 呼び出したい 20 個の外部スクリプトがあり、すべてが終了したら後でそれらの出力を要約します。これを達成する方法がわかりません。
モジュール内のサンプル コード (1 つの子のみを呼び出す) には問題があります。コードに単純なスリープを追加してすぐに戻らないようにするだけで、親は子プロセスを待たずにすぐに終了します。
open my $output, ">/tmp/log" or die "$!";
AnyEvent::Fork
->new
->eval ('
# compile a helper function for later use
sub run {
my ($fh, $output, @cmd) = @_;
# perl will clear close-on-exec on STDOUT/STDERR
open STDOUT, ">&", $output or die;
open STDERR, ">&", $fh or die;
### Added by me to demonstrate that
### $cv->recv returns immediately.
sleep 5;
exec @cmd;
}
')
->send_fh ($output)
->send_arg ("/bin/echo", "hi")
->run ("run", my $cv = AE::cv);
my $stderr = $cv->recv;
その結果、それ/tmp/log
は空です。ここでの使用方法condvar
がわかりません。ドキュメントにはありません。を使用して実行中の子の数を取得できますcondvar
か?
これを正しく行う方法を教えてください。
UPDATEここでの主な問題は、親が子が完了するのを待たないことです。