Perl在一个线程中死掉(并停止整个程序)

时间:2015-10-08 20:36:31

标签: multithreading perl die

我有一个Perl脚本,它产生一组工作线程。当其中一个线程遇到致命错误时,我希望ENTIRE脚本死掉并打印错误消息。

问题是......当你在一个线程中使用die时,它只会使用Thread 42 terminated abnormally: blah blah blah...这样的消息终止当前线程,并且脚本的其余部分将继续运行。

示例:

use strict;
use warnings;
use threads;

# Create threads
for my $i (1 .. 5) {
    threads->create(\&do_something, $i);
}

# Wait for all threads to complete
$_->join() for threads->list();

sub do_something {
    my $i = shift;
    die "I'm died" if $i == 3;
}

输出:

  

线程3异常终止:我在第15行死亡

如何在线程中发出致命错误会终止整个脚本?

1 个答案:

答案 0 :(得分:4)

根据perldoc threads

  

在线程内调用exit EXPR会导致整个应用程序终止。因此,强烈建议不要在线程代码中或在线程应用程序中使用的模块中使用exit()

     

如果确实需要exit(),请考虑使用以下内容:

threads->exit() if threads->can('exit');   # Thread friendly
exit(status);