Signaux et parallélisme - Shell/Batch - Programmation
Marsh Posté le 04-02-2013 à 17:03:03
Je pense qu'il faut
- garder effectivement les PID de sig1 et de sig2
- positionner un flag indiquant si l'on a reçu le signal SIGUSR1 (et un autre pour SIGUSR2)
A réception SIGUSR1 :
- si on a déjà reçu (flag modifié), ne rien faire
- sinon, positionner le flag et envoyer SIGKILL au process sig1
(et idem pour SIGUSR2)
(mais c'est jamais simple ce type de sujet )
Marsh Posté le 04-02-2013 à 17:56:39
Merci beaucoup pour cette réponse !
Voilà ce que j'ai fait (mais sans grande conviction).
Qu'en pensez-vous ?
Code :
|
Marsh Posté le 04-02-2013 à 18:33:08
"trap", c'est pour installer la réponse à la récpetion d'un signal ?
Ca ne va pas, le test doit être fait quand on reçoit le signal, pas dès le début de l'exécution du script.
Je verrais plus quelque chose comme :
Code :
|
Marsh Posté le 05-02-2013 à 06:12:33
Merci pour cette nouvelle réponse !
Le raisonnement me paraît logique et bien plus simple, mais j'ignorais que l'on pouvait inclure une condition dans "trap". Est-ce vraiment possible ?
Je continue de réfléchir.
Marsh Posté le 05-02-2013 à 13:32:39
Je ne sais pas, j'ai pas d'Unix sous la main pour tester. A priori, on lui défini la commande à exécuter et une commande peut tout à fait inclure une condition. Sinon, essayer en mettant celà dans une fonction et en ne faisant que l'appel de la fonction dans le trap.
Faut tester.
Marsh Posté le 05-02-2013 à 19:54:52
Alors... Je n'ai pas réussi à me dépatouiller des messages d'erreur lorsque j'essayais d'inclure la condition dans le trap, mais j'ai pu produire un programme qui fonctionne. Le voici :
Code :
|
signal.sh me sert juste à envoyer des SIGUSR1 (les SIGUSR2, ça ne marche pas, mais bon...)
Voilà... Merci pour votre aide !
Marsh Posté le 04-02-2013 à 16:30:00
Bonjour à tous,
Je suis nouvelle sur ce forum et tiens tout d'abord à vous prévenir : je suis novice en programmation et n'ai pas la lumière à tous les étages, dans cette discipline...
Aussi, j'apprécierais grandement un peu d'aide sur un exercice...
La consigne :
Je dois complétez les scripts suivants pour que :
- la réception du premier signal SIGUSR1 par le processus sigPere.sh provoque la fin de sig1.sh
- la réception du premier signal SIGUSR2 par sigPere.sh provoque la fin de sig2.sh
- après avoir reçu un signal SIGUSR1 (SIGUSR2), sigPere.sh ignore les autres.
J'ai récupéré le PID des deux processus fils pour que sigPere puisse leur envoyer un SIGKILL. Ce qui donnerait :
Après quoi, sigPere ignorerait les signaux suivants :
Mais je bloque sur l'enchaînement du script. Devrais-je incrémenter un compteur ?
Merci de m'avoir lue...