Cómo enviar y capturar SIGTERM en Bash y Python

Como Enviar Y Capturar Sigterm En Bash Y Python



En Linux, los procesos se comunican entre sí mediante señales. Las señales actúan como interrupciones de software que notifican a los programas de varios eventos o solicitudes. Por ejemplo, cuando se está ejecutando un programa, puede enviar una señal de interrupción para salir del programa. La señal que se envía puede desencadenar diferentes acciones, como detener una ejecución, finalizar el programa, reanudar la ejecución, etc.

Cuando trabaje con Bash y Python, puede enviar la señal SIGTERM para finalizar el proceso en ejecución suavemente. Esta publicación cubre cómo enviar y capturar SIGTERM en Bash y Python.

¿Qué es TÉRMINO DE FIRMA?

Los sistemas Unix tienen tres categorías de señales: sistema, dispositivo y señales definidas por el usuario. Cada señal tiene un valor entero. Puede ejecutar la señal especificando su nombre o su valor entero.







SIGTERM es una señal con un valor entero de 15. Se ejecuta cuando desea finalizar suavemente un proceso en ejecución. La siguiente es la sintaxis para usar SIGTERM en Bash:



matar PLAZO OBJETIVO < PID >

o

matar - 15 < PID >

Puede verificar todas las señales disponibles usando el siguiente comando:



matar -l





Cómo enviar y capturar SIGTERM en Bash y Python

Es posible que desee enviar y capturar SIGTERM en Bash y Python en diferentes instancias. Cuando ejecuta su programa Bash o Python, puede ejecutar la señal SIGTERM para eliminar el programa. Tenemos diferentes ejemplos para entender cómo envías y capturas SIGTERM en Bash y Python.

1. Usar una secuencia de comandos de Python

Al usar Python 1.4 y las últimas versiones, puede utilizar la biblioteca de señales para enviar y capturar SIGTERM. Importe la biblioteca en su programa para definir cómo su programa debe capturar y reaccionar ante diferentes señales. La biblioteca de señales le permite crear un controlador de señales para informar el número entero de la señal recibida. A continuación, puede registrar la señal capturada y obtener información sobre el proceso actual, como su PID. Pongamos un ejemplo.



Tenemos un script de Python que captura el número entero de la señal enviada. Además, captura el PID del proceso actual.

En la siguiente imagen, ejecutamos el script de Python y tenemos un ciclo while que se ejecuta cada pocos segundos. En otro terminal, podemos enviar la señal SIGTERM para finalizar el proceso especificando el PID que obtenemos al ejecutar el script de Python:

Una vez que enviamos la señal SIGTERM, notamos que el script deja de ejecutarse. Eso es porque captura el número entero de la señal. En este caso, ejecutamos el kill -15 para la señal SIGTERM. También puede enviar la señal de interrupción SIGTERM utilizando la palabra clave SIGTERM en lugar de su valor entero. Todavía obtenemos el mismo resultado.

También puede ejecutar su trabajo de Python usando la siguiente sintaxis:

pitón3 < guión/trabajo > &

A diferencia del primer método, cuando enviamos el SIGTERM usando esta opción, podemos ver que la identificación del trabajo se imprime cuando el trabajo comienza a ejecutarse. Después de que lo matamos, obtenemos el estado 'hecho'. El SIGTERM se puede enviar especificando su nombre o su entero.

2. Usando una secuencia de comandos Bash

Puede usar el comando 'trampa' para captar una señal al ejecutar un script Bash. En este ejemplo, agregamos el comando 'trampa' para capturar la señal SIGTERM. El script es un bucle 'for' para ejecutar el comando 'fecha' mil veces si no se envía ninguna señal SIGTERM.

Al ejecutar el script Bash, puede enviar la señal SIGTERM presionando el botón Control + Z teclas del teclado El comando 'trap' captura la señal transmitida y el bucle 'for' dejará de ejecutarse. Obtendrá una salida que confirma que el trabajo en ejecución recibió una señal SIGTERM y se detuvo.

Así es como envías y capturas SIGTERM en Bash.

Conclusión

Puede enviar diferentes señales para lograr diferentes objetivos al ejecutar un trabajo o programa. SIGTERM se envía para detener un programa suavemente. Para Python, necesita un controlador de señal para captar una señal, y puede enviar el SIGTERM usando el comando 'matar'. Puede usar el comando 'trampa' y las teclas del teclado en Bash para capturar y enviar la señal SIGTERM. Esta publicación presentó diferentes ejemplos sobre cómo lograr eso en detalle.