У меня есть скрипт Perl, который порождает группу рабочих потоков. Когда один из этих потоков сталкивается с фатальной ошибкой, мне бы хотелось, чтобы скрипт ENTIRE умирал и печатал сообщение об ошибке.Perl die (и остановить всю программу) в потоке
Проблема заключается в том, что ... когда вы используете 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
Как я могу сделать фатальную ошибку в потоке, убить весь скрипт?
просто звоню выход делает работу, но она печатает некрасивый «Программа прекращается с запуском потоков» ошибка. Есть ли способ убить все потоки и выйти чисто? – tjwrona1992