У меня есть программа perl, которая порождает несколько потоков. Каждый поток обрабатывает некоторую задачу (путем отключения других системных команд и т. Д.), А затем, когда все это делается, ждет.perl: Нити не умирают, когда основной процесс умирает
После того, как все потоки выполнены, они подают сигнал на родительский процесс. Затем родитель загружает новые задания и сигнализирует, что потоки будут работать над этими новыми задачами.
В идеале эта программа будет работать вечно.
Теперь, если я убью его в командной строке с kill -9 MainProgram.pl
, его не убить! Я вижу результат работы, в котором работают потоки, а затем я также вижу, что после того, как они сделаны, они получают новые рабочие места и просто продолжают и продолжают ...
Я абсолютно смущен. Если я сделаю kill -9 MainProgram.pl
, он должен убить все тем он владеет, не так ли? Независимо от того, что делают нити ...
И даже если потоки делают I/O, и поэтому они ждут ввода IO ... Я ожидаю, что нить умрет после ее текущего задача сделана .. но ясно, что Main также перезагружает задания, так как потоки продолжают продолжаться ...
Это поведение наблюдается в perl?
EDIT: Некоторые из кода в mainProgram.pl
use threads;
use threads::shared;
for (my $count = 0; $count <= $threadNum-1; $count++) {
$t = threads->new(\&handleEvent, $count) ;
push(@threads, $t);
}
#Parent thread:
while(1) {
lock($parentSignal);
cond_wait($parentSignal);
getEvents();
while(@eventCount== 0){
sleep($parent_sleep_time);
getEvents(); #Try to get events again until you get some new stuff to process
}
cond_broadcast($threadsDone); # threadsgo work on this
}
Благодаря
Какие темы? Perl имеет как минимум две реализации потоков. –
Было бы очень хорошо, если бы вы могли опубликовать пример * runnable *, чтобы мы могли проверить проблему. Без такого кода остаются только вопросы: откуда происходит 'getEvents'? Почему вы используете общие переменные вместо семафоров для связи? Каково содержимое 'handle_Event'? – amon
Что произойдет, если вы попытаетесь убить PID, а не имя файла, процесса? В конце концов, kill -9 нельзя избежать. Я бы сказал, что вы делаете это неправильно. – pilcrow