Bonjour,
J'essaie de capturer le signal SIGINT pour quitter proprement mon script perl qui fait tourner une Thread. Mais voilà le problème, J'aimerais que mon thread finisse ce qu'il a à faire et rende la main au script perl principal avant que que ce dernier ne quitte aussi. L'exemple qui suit ne fait rien de particulier. Le thread affiche une chaine de caractère jusqu'à ce que la variable partagée soit modifiée. Ensuite c'est le script perl principal qui s'arrête.
(Je ne sais pas s'il est nécessaire de faire un "lock" pour les accès en lecture sur une variable partagée dans un thread)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #! /usr/bin/perl use threads; use threads::shared; my $flag : shared = 0; $thr1 = threads->new(sub { lock($flag); while (!$flag) { print "thread\n"; sleep(3); lock($flag); } }); $SIG{INT} = sub { $thr2 = threads->new(sub { lock($flag); $flag = 1; }); $thr2->join; $thr1->join; exit; }; $thr1->join;
Dans le raisonnement, le script perl ne devrait pas quitter sans que le thread soit terminé. Dans mon code c'est autre chose :s
Je lance le script, "thread" est affiché en boucle, mais je n'arrive pas à quitter proprement avec la commande "ctrl+c", la boucle ne se termine pas (mon OS : SLES 10, juste au cas où ).
Auriez-vous des idées?
Merci.
--
Mr_Brown
Partager