Daily Archives: 17/10/2013

Capturar Señales con Trap

Cuando estamos programando algún script puede interesarnos mandar señales mientras se está ejecutando. Para lograr que el script responda a las señales de kill utilizaremos la orden trap, que tiene la siguiente sintaxis.

trap acción señales

Los parámetros son:

  • acción: Definiremos que ejecutar cuando reciba la señal.
  • señales: Es la lista de señales ante las que responderá el script.

El principal uso de esto es controlar la salida de nuestro scripts, de forma que sea un cierre controlado, sin dejar archivos abiertos o temporales sin borrar.

Un ejemplo

#!/bin/bash

trap 'echo "Señal recibida"; exit' SIGKILL

while true
do
  echo "Soy un bucle"
done

En este caso cuando ejecutamos el script, si le enviamos un SIGKILL escribirá “Señal recibida” en el terminal y terminará.

En este punto también comentar que podemos usar varias lineas de trap para actuar de distinta forma ante distintas señales.

#!/bin/bash

trap 'echo "Señal SIGUSR1"; exit' SIGUSR1
trap 'echo "Señal SIGUSR2"; exit' SIGUSR2

while true
do
  echo "Soy un bucle"
done

Responderá diferente ante las señales SIGUSR1 y SIGUSR2.