私は現在 IRC ボットを書いています。スクリプトは Perl モジュールとしてZNCにロードされますが、フォークされたプロセスを作成すると、入出力エラーでボットが切断されます。これは fork を使用しないスクリプトの例ですが、これにより、スクリプトがタスクを完了するまでボットがフリーズします。
package imdb;
use warnings;
use strict;
sub new
{
my ($class) = @_;
my $self = {};
bless( $self, $class );
return( $self );
}
sub OnChanMsg
{
my ($self, $nick, $channel,$text) = @_;
#unless (my $pid = fork()) {
my $result = a_slow_process($text);
ZNC::PutIRC( "PRIVMSG $channel :$result" );
# exit;
#}
return( ZNC::CONTINUE );
}
sub OnShutdown
{
my ( $me ) = @_;
}
sub a_slow_process {
my $input = shift;
sleep 10;
return "You said $input.";
}
1;
エラーの原因となっている fork コードはコメントアウトされています。これを修正するにはどうすればよいですか?
追加するために編集: ZNC::PutIRC を子プロセスに入れるべきではないと言われました。