Problème avec les signaux

Problème avec les signaux - Shell/Batch - Programmation

Marsh Posté le 20-12-2011 à 12:21:55    

Bonjour à tous
Je tiens d'abord à vous prévenir que je suis un novice complet en informatique  :D  
J'ai un petit exo à faire et je bloque un peu.
 
Il faut donc écrire un script qui affiche "SIGUSR1 recu" lorsqu'il reçoit un signal USR1 pour la première fois et se termine après avoir affiché "SIGUSR1 fin" lorsque ce n'est pas la première fois. Il est précisé dans la consigne que lors de la réception du premier signal SIGUSR1, le script doit redéfinir le traitement à effectuer (là je comprends pas trop...).
 
J'ai commencé à chercher avec des boucles mais sans succès, je suis donc resté sur ça  
 

Code :
  1. #! /bin/bash
  2. # modif.sh
  3. echo je suis le processus $$
  4. trap "echo SIGUSR1 recu " SIGUSR1
  5. while  true      #Il faudrait rajouter la condition le signal est reçu pour la première fois je suppose..
  6. do
  7. sleep 1
  8. done
  9. trap "echo SIGUSR1 fin; exit 1" SIGUSR1
  10. while true
  11. do
  12. sleep 1
  13. done


 
Merci à ceux qui auront pris le temps de m'aider (s'il y en a)

Reply

Marsh Posté le 20-12-2011 à 12:21:55   

Reply

Marsh Posté le 20-12-2011 à 12:36:51    

salut,
 
La boucle n'a pour but que de simuler la durée d'un script.
En fait, le script-exercice se déroule dans la commande trap.
Je te suggère d'y incrémenter un compteur.

Reply

Marsh Posté le 20-12-2011 à 13:25:09    

Merci pour ta réponse !
Mais pour mettre un compteur, je suis quand même obligé de mettre une condition du type "si le signal est reçu pour la 2ième fois, alors affiche signal reçu fin" ? Je comprends pas trop comment l'incrémenter dans l'instruction trap.
Suis-je sur la bonne voie ?

Code :
  1. #! /bin/bash
  2. # modif.sh
  3. echo je suis le processus $$
  4. trap "echo SIGUSR1 recu " SIGUSR1
  5. i=0
  6. while [ true ] && [ i -le 1 ]
  7. do
  8. i = `expr $i + 1`
  9. sleep 1
  10. done
  11. trap "echo SIGUSR1 fin; exit 1" SIGUSR1
  12. while true
  13. do
  14. sleep 1
  15. done

Reply

Marsh Posté le 20-12-2011 à 13:58:44    

expr est un programme externe non-indispensable (le shell peut effectuer l'évaluation arithmétique par lui-même) !
 
au lieu d'utiliser trap pour ne faire que l'affichage, tu peux y incrémenter i, et l'y tester pour afficher l'un ou l'autre message, et quitter.


Message édité par Profil supprimé le 20-12-2011 à 14:00:43
Reply

Marsh Posté le 20-12-2011 à 18:11:46    

Je copie ici ma réponse à ton MP, car ça pourrait être utile à d'autres plus tard.
 
ton trap se contente de faire un echo, mais il peut contenir plus : une liste de commandes, un appel à une fonction, ou à un autre script.  
 
je t'explique la manière portable, bash l'accepte (ça fonctionnera), mais il est plus souple.  
les  évaluations arithmétiques se font entre doubles-parenthèses  

Code :
  1. increment=$(( $increment + 1 ))
  2. echo $increment
  3. 1


fais d'autres essais, d'autres opérations...  
 
les tests se font entre crochets simples

Code :
  1. unset increment
  2. if [ "$increment" -ge 1 ] #gt = greater or equal, voir help test
  3. then echo ouais
  4. else echo oh
  5. fi


va afficher "oh"  
si tu ajoutes l'incrémentation (vue précédemment) après echo oh, la deuxième fois que le test sera effectué "$increment" vaudra 1, et alors il affichera "ouais"


Message édité par Profil supprimé le 20-12-2011 à 18:12:31
Reply

Sujets relatifs:

Leave a Replay

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