[5] AnyEvent::Fork
は、 AnyEvent
環境で子プロセスを起動して
Perl スクリプトを実行させるためのPerlモジュールです。
[2] AnyEvent::Fork clarification () <http://lists.schmorp.de/pipermail/anyevent/2014q1/000634.html>
[3] fork
メソッドを呼び出していて、かつ子プロセス側で
AnyEvent
を使っていると、ゾンビが残るようです。子プロセス側で... とすれば、回避できます。 (AnyEvent
が SIGCHLD
を上書きするのが原因らしい。)
[4]
eval
のコード内でエラーが起こると、子プロセスが死に、
次の操作で親プロセスが書き込みエラーで死にます。
eval
の結果を親プロセスが得ることができないので次の操作を止めることができませんし、
親プロセスの書き込みエラーは AnyEvent
イベントループからの呼び出しの中なので
catch する方法もありません。
回避するには eval
で実行するコードを Perl eval
で括って死なないようにするしかありません。 (エラーは warn
など死なない方法で表示するなり、
別途 run
などの親子で通信できる方法で親に知らせるなりするしかありません。)