У меня есть сценарий Perl, который порождает группу рабочих потоков. Когда один из этих потоков обнаруживает фатальную ошибку, я бы хотел, чтобы сценарий ВЕСЬ умер и напечатал сообщение об ошибке.
Проблема в том, что ... когда вы используете 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
Как я могу сделать фатальную ошибку в потоке, убить весь скрипт?