我目前正在编写一个 IRC 机器人。脚本在ZNC中作为 perl 模块加载,但如果我创建分叉进程,机器人会因输入/输出错误而断开连接。这是一个没有 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;
导致错误的分叉代码被注释掉。我该如何解决?
编辑添加:有人告诉我 ZNC::PutIRC 不应该放在子进程中。