Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fonctionnement de trap sous bash

3 réponses
Avatar
octane
Bonjour,

je veux trapper le signal 15 dans un script bash.
J'utilise:

trap 'echo touche' 15

cela fonctionne bien, mais pas comme je le souhaite.

admettons:

#! /bin/bash
trap 'echo touche' 15
sleep 120

si j'envoie un sig 15 au script, l'affichage de "touche" n'apparait
qu'a la fin du script.

comment faire pour que le trap s'execute des que le signal 15 est
envoye?

mon cas concerne le lancement d'un calcul tres long. Je dois trapper le
signal 15 envoye au script shell pour envoyer un sigUSR1 au programme
de calcul.
La ca va poser probleme, car le sigUSR1 sera envoye lorsque le calcul
sera fini.
Je me trompe? Il y a une methode pour executer directement le trap?

Merci

3 réponses

Avatar
Stephane Chazelas
On 25 Sep 2006 01:55:03 -0700, wrote:
Bonjour,

je veux trapper le signal 15 dans un script bash.
J'utilise:

trap 'echo touche' 15

cela fonctionne bien, mais pas comme je le souhaite.

admettons:

#! /bin/bash
trap 'echo touche' 15
sleep 120

si j'envoie un sig 15 au script, l'affichage de "touche" n'apparait
qu'a la fin du script.
[...]


A la fin de sleep plutot qu'a la fin du script.

#! /bin/sh
(
trap '' TERM # ignore TERM
exec sleep 120
) &
sleep_pid=$!

trap '
echo touche
kill -USR1 "$sleep_pid"
' TERM

wait

--
Stephane

Avatar
octane

#! /bin/sh
(
trap '' TERM # ignore TERM


Je ne suis pas sur de vraiment comprendre ce premier trap (?) c'est
pour etre sur que le signal 15 ne sera pas pris par la commande de la
ligne suivante, ou il y a une autre ruse?

exec sleep 120
) &
sleep_pid=$!

trap '
echo touche
kill -USR1 "$sleep_pid"
' TERM

wait

merci.


Avatar
Stephane Chazelas
On 25 Sep 2006 09:27:05 -0700, wrote:

#! /bin/sh
(
trap '' TERM # ignore TERM


Je ne suis pas sur de vraiment comprendre ce premier trap (?) c'est
pour etre sur que le signal 15 ne sera pas pris par la commande de la
ligne suivante, ou il y a une autre ruse?
[...]


Oui, c'est ca, pour que le TERM ne soit recu que par le shell.
Par exemple si tu killes tout le process group au lieu de just
le pid du script.

--
Stephane