[Perl] Arrêter un programme proprement lors d'un Ctrl + C

Arrêter un programme proprement lors d'un Ctrl + C [Perl] - Perl - Programmation

Marsh Posté le 22-04-2004 à 13:27:30    

J'ai un script qui va devoir rouler dans un while (1) {}
 
j'aimerais que lorsque qu'on fasse Ctrl + C pour l'arrêter, que celui-ci capte le signal et effectue certaines tâches (écriture dans les logs par exemple)
 
J'ai essayé avec $SIG{INT} = \&quit(); mais ca fait quitter le programme au lancement et non lors d'un Ctrl + C
 
une idée?
 
 
merci

Reply

Marsh Posté le 22-04-2004 à 13:27:30   

Reply

Marsh Posté le 22-04-2004 à 13:31:03    

ben tu vires les () à quit quand même :D

Reply

Marsh Posté le 22-04-2004 à 13:32:45    

t'as aussi le modeule sigtrap
 
petit conseil : dès que tu as atrapé SIGINT, ça peut être une bonne idée de remettre le gestionnaire par défaut, en cas de problème vraiment sérieux.

Reply

Marsh Posté le 22-04-2004 à 13:33:52    

Taz a écrit :

ben tu vires les () à quit quand même :D


 
en perl ca change rien si je les places ou non, c'est simplement mieux pour l'oeil

Reply

Marsh Posté le 22-04-2004 à 13:34:47    

Taz a écrit :

t'as aussi le modeule sigtrap
 
petit conseil : dès que tu as atrapé SIGINT, ça peut être une bonne idée de remettre le gestionnaire par défaut, en cas de problème vraiment sérieux.


 
je vais regarder la différence entre SIGTRAP et SIGINT (déjà que jsais pas trop la définition du SIGINT)
 
"le gestionnaire par défaut" -> jpige que dalle :D

Reply

Marsh Posté le 22-04-2004 à 13:39:31    

Code :
  1. use sigtrap 'handler' => \&myhand, 'INT';


 
ca semble fonctionner
 
 
merci oh grand gourou

Reply

Marsh Posté le 22-04-2004 à 13:51:15    

Code :
  1. $SIG{INT}=\&myhand;
  2. sub myhand
  3. {
  4.     print "Reçu $SIG{INT}",@_,"\n";
  5. }
  6. print "Rrrrrrrrrr\n";
  7. while(1){sleep 1;}

tu disais ?

Reply

Marsh Posté le 22-04-2004 à 13:51:39    

hum... finalement c'est p-e pas fini :D
 
y'a t-il moyen de lui laisser terminer sa boucle while (pas la boucle au complet, mais ce tour ci) avant?
 
du genre
 

Code :
  1. while (1) {
  2.   `dir C:\`;
  3.   print LOG "HH:MM:SS Dir\n";
  4. }


 
je fais Ctrl + C lorsqu'il effectue son dir C:\, j'aimerais qu'il puisse tout meme l'écrire dans le log avant d'exécuter ma fonction de fin d'exécution

Reply

Marsh Posté le 22-04-2004 à 13:55:16    

non

Reply

Marsh Posté le 22-04-2004 à 13:56:55    

oui :D
 
sub myhand {
  $quit = 1;
}
 
et mon while je le change pour
 
until ($quit) {
  ...
}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed