Shell Scripting: cómo enviar una señal a un proceso

Prerrequisitos: Procesos , Bash Scripting , Biblioteca de funciones de Shell

Las señales permiten que el sistema operativo se comunique con programas (o procesos). Crearemos un script bash interactivo para enviar señales a un proceso y observar el estado del proceso. Para la demostración, usaremos un programa llamado xlogo al que enviaremos señales desde nuestro script bash. Es un programa que muestra el logotipo del sistema X Window.

Instale xlogo si no está presente en su sistema

$ sudo apt-get install x11-apps

Crear script de shell

El nombre del script será señales.sh.

$ touch signals.sh 

Que sea un archivo ejecutable.

$ chmod +x signals.sh

Abra el archivo y agregue el siguiente Script.

#!/bin/bash

# enabling job control in the script
set -m

# starting the program in background
$1 &
echo "$1 process started in background..."

# storing the Process ID(PID)
PID=`pgrep $1`

while [[ true ]]
do
  # print the job status
  echo "$(jobs -l)"

  # terminate the script
  echo "Do you want to continue?(y/n)"
  read CHOICE
  if [[ $CHOICE == "n" ]]
  then
    # send SIGHUP(hangup signal to process)
    kill -1 $PID
    echo "$(jobs -l)"
    break
  fi

  # restart the process if it has been terminated
  # checks whether PID exists or not. If not, it 
  # creates new instance of the process
  if ! ps -p $PID > /dev/null ; then
    echo -e "\nRestarting $1 process which was terminated earlier"
    $1 &
    echo "$(jobs -l)"
    PID=`pgrep $1`
  fi

  # sending signal to the process via kill command
  echo -e "\nEnter Signal Number"
  read NUM 
  kill -$NUM $PID;
  sleep 1;

done

Toma el nombre de un proceso válido como argumento en la terminal. La entrada es el número de señal. Las señales se envían a través del comando kill y los trabajos -l imprimen el estado del proceso. Al ejecutar el script, si terminamos el proceso, hay una opción para reiniciar el proceso.

Ejecutar el guión

$ ./signals.sh xlogo

Inicie el script con xlogo como argumento. El proceso xlogo comienza a ejecutarse en segundo plano.

Verá una pequeña ventana emergente que muestra el logotipo X en su pantalla. Al arrastrarlo y cambiar el tamaño de la ventana, el logotipo cambia de forma en consecuencia, lo que significa que el programa se está ejecutando correctamente. El programa se ejecuta en segundo plano.

Presione y para continuar o n para salir del guión.

Enviando señal SIGSTP a proceso. El número de señal correspondiente es 19

La señal número 19 corresponde a una señal denominada SIGSTOP. Es una especie de pausa o congela un programa. Se utiliza cuando queremos detener un proceso pero no queremos cerrarlo. Vuelve el indicador de shell. El terminal muestra el estado actual del proceso.

Podemos ver que el logo X deja de cambiar de tamaño cuando se arrastra la ventana.

xlogo deja de funcionar. El logotipo no cambia de tamaño. El proceso está detenido/en pausa.

Envío de señales SIGSTOP(19), SIGCONT(18), SIGINT(2) y SIGHUP(1).

Envío de SIGSTOP, SIGCONT, SIGINT y por último SIGHUP al proceso

Lista de señales comunes

 Número               

   Nombre                           

Sentido

1 SUSCRÍBETE          Si un proceso se está ejecutando desde una terminal y esa misma terminal está cerrada/finalizada, entonces el proceso recibe esta señal y, en consecuencia, finaliza.
2 SEGUIR Cortésmente le dice al programa que termine. Realiza la misma función que Ctrl+C. Depende del proceso si lo escuchará o no.
9 sigilo A diferencia de otras señales, la señal SIGKILL nunca se envía al proceso. En su lugar, la terminal mata inmediatamente el programa y el programa no tiene tiempo para guardar sus datos o limpiar su trabajo. Use esto solo como último recurso.
15 SIGTERM                 Esta es la señal predeterminada del comando matar
18 SIGCONT Esto restaurará un proceso que fue pausado por una señal SIGSTOP o SIGTSTP
19 SEGUIMIENTO Esta señal pausa/congela el proceso. El proceso no puede optar por ignorarlo.
20 SIGTSTP Es similar a SIGSTOP pero el proceso que recibe esta señal no tiene la obligación de escucharla. El proceso puede optar por ignorarlo.

Publicación traducida automáticamente

Artículo escrito por sushruta19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *