[5] [DFN[[CODE[AnyEvent::Fork]]]] は、 [CODE[AnyEvent]] 環境で[[子プロセス]]を[[起動]]して
[[Perl]] [[スクリプト]]を実行させるための[[Perlモジュール]]です。

[REFS[
- [1] [CITE[AnyEvent::Fork - search.cpan.org]]
([TIME[2016-10-20 18:41:14 +09:00]])
<http://search.cpan.org/dist/AnyEvent-Fork/Fork.pm>
]REFS]

[2] [CITE[AnyEvent::Fork clarification]]
([TIME[2014-01-11 23:06:25 +09:00]])
<http://lists.schmorp.de/pipermail/anyevent/2014q1/000634.html>

[3] [CODE[fork]] [[メソッド]]を呼び出していて、かつ[[子プロセス]]側で
[CODE[AnyEvent]] を使っていると、[[ゾンビ]]が残るようです。[[子プロセス]]側で
[FIG[
[PRE(code perl)[
$SIG{CHLD} = 'IGNORE';
]PRE]
]FIG]
... とすれば、回避できます。 ([CODE[AnyEvent]] が [CODE[SIGCHLD]]
を上書きするのが原因らしい。)

[4] 
[CODE[eval]] のコード内でエラーが起こると、子プロセスが死に、
次の操作で親プロセスが書き込みエラーで死にます。
[CODE[eval]] の結果を親プロセスが得ることができないので次の操作を止めることができませんし、
親プロセスの書き込みエラーは [CODE[AnyEvent]] イベントループからの呼び出しの中なので
[[catch]] する方法もありません。
回避するには [CODE[eval]] で実行するコードを [[Perl]] [CODE[eval]]
で括って死なないようにするしかありません。 (エラーは [CODE[warn]] など死なない方法で表示するなり、
別途 [CODE[run]] などの親子で通信できる方法で親に知らせるなりするしかありません。)
[TIME[2017-06-05T12:17:24.800Z]]