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
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.
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.
Envío de señales SIGSTOP(19), SIGCONT(18), SIGINT(2) y SIGHUP(1).
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