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