Comunicació de processos amb l'ordre kill i captura de senyals

De WikiCat IT
Dreceres ràpides: navegació, cerca

En aquest exemple, enviarem senyals amb l'ordre kill i capturar-la per fer una funció diferent a la inicialment programada.

Farem servir un script com el següent, que anomenarem trap.sh:

#!/bin/bash
#trap.sh Script per capturar senyals

N=0
while true
do
((N++))
if [ $N -gt 200000 ];then
exit 1
fi
done
exit 0

Es demana que aquest script no pugui ser aturat ni amb "Ctrl+C" ni amb "Ctrl+Z" (Cal capturar els senyals).

El fitxer ha d'estar creat i tenir permís d'execució.

Si el temps que triga és massa petit (o massa gran) podem canviar el valor 200000 de l'script.


Per saber el valor real, podem fer servir la comanda:

time ./trap.sh
real	0m0,841s
user	0m0,836s
sys	0m0,004s

Menys d'un segon d'execució. Per tant, pugem el valor del comptador.

Perquè el nostre script no faci cas de de Ctrl+C (SIGINT) i CTRl+Z (SIGSTOP) afegim la següent línia al script:

trap "echo procés $$ ignora el senyal" SIGINT SIGTSTP

Quan executem el procés, ens diu:

$ ./trap.sh
^Cprocés 523 ignora el senyal
^Zprocés 523 ignora el senyal

Aquest procés ja no el podem finalitzar amb el terminal en el qual s'està executant, però encara podríem aturar-lo amb un altre terminal, fent servir la comanda kill o killall

 $ kill 523
 $ killall ./trap.sh
Eines de l'usuari
Espais de noms

Variants
Navegació
Eines