En este artículo, discutiremos la descripción general de las señales y trampas en Unix y lo entenderemos con la ayuda de un ejemplo. Y finalmente concluiremos diferentes escenarios para señales y trampas en Unix. Discutámoslo uno por uno.
Visión general :
- Las señales son interrupciones de software que se envían a un programa para notificarle un acontecimiento importante. Las requests de los usuarios de errores de acceso ilegal a la memoria son ejemplos de ocurrencias. Algunas señales, como la señal de interrupción, indican que un usuario le ha pedido al programa que realice una acción que normalmente no forma parte del flujo de control del programa.
- Trap especifica y activa los controladores que se ejecutarán cuando el shell reciba señales u otras circunstancias excepcionales.
- Cuando el shell recibe la(s) señal(es) SIGNAL SPEC, leerá y ejecutará ARG. Si ARG no está presente (y solo se proporciona una ESPECIFICACIÓN DE SEÑAL), o si ARG es un guión («-«), cada señal dada se restablece a su valor predeterminado. Si ARG es la string nula, el shell y los comandos que llama ignoran cada ESPECIFICACIÓN DE SEÑAL.
- Si presiona Ctrl-C o Ctrl- mientras su aplicación se está ejecutando, terminará tan pronto como llegue la señal. Hay ocasiones en las que no desea que la aplicación se detenga inmediatamente una vez que llega la señal. Puede optar por ignorar la señal y continuar ejecutándose, o puede realizar algún tipo de limpieza antes de salir del script. El comando trap le permite regular cómo responde un programa a una señal.
- Una señal es una comunicación asíncrona que consiste en un número que se puede enviar de un proceso a otro o del sistema operativo a un proceso si se pulsan determinadas teclas o si ocurre algo inusual.
Ejemplo:
si ha escrito cualquier cantidad de código bash, es casi seguro que se ha encontrado con el comando trap. Trap le permite capturar señales y ejecutar código cuando ocurren. Las señales son notificaciones asincrónicas enviadas a su secuencia de comandos cuando ocurren eventos específicos. La mayoría de estas alertas son para situaciones que espera que nunca ocurran, como un acceso incorrecto a la memoria o una mala llamada al sistema. Sin embargo, hay uno o dos casos que quizás desee abordar. Hay eventos de «usuario» adicionales que nunca son creados por el sistema y pueden usarse para señalar su script. Bash también tiene una pseudoseñal llamada «SALIR» que se ejecuta cuando finaliza su secuencia de comandos.
Implementación en python:
Python3
#GeeksforGeeks trap itsatrap 1 2 3 7 #cleanup method cleanup() { echo "We got the signal to clean, beginning" rm -rf /tmp/temp_*.$$ echo "Done! ... exiting now!." exit 1 } # for loop for i in * do sed s/FOO/BAR/g $i > /tmp/temp_${i}.$$ && mv /tmp/temp_${i}.$$ $i done
Precaución:
¡NO EJECUTE EL GUIÓN ANTERIOR, YA QUE ES UNA TRAMPA!
Actividades típicas de Unix/Linux:
- Cada señal está vinculada con un procedimiento predeterminado. La operación que realiza un script o programa cuando recibe una señal se conoce como operación predeterminada con una señal.
- Una de las posibles acciones predeterminadas es:
- poner fin al proceso
- Señal para saltar
- Volcado de memoria core Cuando recibe la señal, genera un archivo llamado core que contiene la imagen de memoria del proceso.
- Poner fin al procedimiento.
- Continúe el procedimiento hasta que llegue a su fin.
Diferentes escenarios para señales y trampas en Unix:
- Si hay varios comandos configurados para atrapar, deben estar rodeados de citas. También notará que el shell de la línea de comando escanea cuando se ejecuta el comando trap y nuevamente cuando se recibe una de las señales mencionadas.
- Si ignora una señal, todos los proyectiles adicionales harán lo mismo. Sin embargo, si especifica que se realice una acción cuando se reciba la señal, todas las subcapas seguirán realizando la acción cuando se reciba la señal.
- Puede haber ocasiones en las que no desee que los usuarios de sus scripts se cierren prematuramente utilizando secuencias de cancelación del teclado, como cuando se requiere una entrada o una limpieza. La instrucción trap intercepta estas secuencias y puede diseñarse para ejecutar un conjunto de comandos cuando son interceptados.
- Cuando Bash recibe una señal para la que se ha establecido una trampa mientras espera que finalice un comando, la trampa no se realiza hasta que finaliza el comando.
- Cuando Bash está esperando un comando asíncrono usando la espera incorporada, la llegada de una señal para la cual se ha configurado una trampa hace que la espera incorporada regrese inmediatamente con un estado de salida mayor que 128 y la trampa se realice. .
- Cuando se reciben una o más señales específicas, este comando define la acción a realizar. Cuando el proyectil recibe cierta señal, realiza la acción indicada.
- Especifica la señal que se atrapará. Tiene la opción de especificar un número de señal o un nombre de señal. Cuando especifica un nombre de señal, debe omitir el SIG inicial (por ejemplo, especifique INT para SIGINT). Los requisitos para cada señal se pueden encontrar en la documentación del sistema operativo que se utiliza.
- Cabe señalar que SIGTERM no se puede especificar.
Publicación traducida automáticamente
Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA