我有一个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行死亡
如何在线程中发出致命错误会终止整个脚本?
答案 0 :(得分:4)
在线程内调用exit EXPR会导致整个应用程序终止。因此,强烈建议不要在线程代码中或在线程应用程序中使用的模块中使用
exit()
。如果确实需要
exit()
,请考虑使用以下内容:threads->exit() if threads->can('exit'); # Thread friendly exit(status);