收到信号SIGSTOP,但在perl脚本中没有设置信号处理程序

时间:2013-07-30 16:30:13

标签: multithreading perl signals

我的perl脚本中有以下代码,但似乎无法正常工作:

my $thr;

sub start__server_thread()
{
        $thr = threads->create(\&iperf_start_server, $_[0], $_[1], $_[2]);
        print("Value of thread is $thr\n");
        &START_SERVER_RESPONSE($controller_ip, $controller_port, "success", 2345, $_[1]);
}

sub iperf_start_server()
{
# Do some stuff here and then handle the signal
$SIG{'SIGSTOP'} = sub {
        print("Stop signal received\n");
        $thr->exit();
        $flag = 1;
        };
}

sub stop_server()
{
        my ($dat,$filelog,$result);
        $thr->kill('STOP');
        $flag = 1;
        sleep(10);
        $thr->exit(1);
}

当从其他一些上下文中调用stop_server()时,它会尝试将SIGSTOP信号发送给线程。此时执行停止并且我收到错误“Signal SIGSTOP已收到,但在perl脚本中没有设置信号处理程序。我哪里出错?

1 个答案:

答案 0 :(得分:1)

您应该设置$SIG{STOP},而不是$SIG{SIGSTOP}

如果您use warnings,您会收到此错误的提醒。如果你use diagnostics,你会得到一些关于导致错误的原因以及解决方法的实用建议。