Una breve introducción al mecanismo de señalización de Linux

  
                

¿Qué es el mecanismo de señal de Linux? El mecanismo de señal de Linux no es tan simple de explicar, este artículo es solo para explicar los conceptos básicos del mecanismo de señal de Linux, le permite comprender el mecanismo de señal de Linux, aprendamos juntos.

proceso básico de Linux ha sido mencionado en un artículo, Linux para procesar unidades para ejecutar el programa. Podemos pensar en la computadora como un edificio, el núcleo es el administrador del edificio y el proceso es el inquilino del edificio. Cada proceso tiene una sala separada (el espacio de memoria que pertenece al proceso), y no se permite que cada sala ingrese fuera del proceso. De esta manera, cada proceso se centra en lo que hace, independientemente de otros procesos, y no permite que otros procesos vean dentro de la sala. Este es un mecanismo de protección para cada proceso.
(Imagine cómo cientos de procesos siempre interfieren entre sí, cuán confuso es, o cientos de procesos se asoman unos a otros … …).

Sin embargo, en algunos casos, necesitamos romper la sala cerrada. Con el fin de intercambiar información con el proceso. Por ejemplo, el kernel encontró que hay un proceso en la pared (error de hardware), y el proceso debe ser consciente de que esto seguirá arruinando todo el edificio. Para otro ejemplo, queremos trabajar juntos en múltiples procesos. De esta manera, necesitamos una cierta forma de comunicación. Una señal es una forma de pasar información a un proceso. Podemos pensar en la señal como el administrador del edificio metiendo una pequeña nota en el buzón de la sala. Luego, el proceso saca la nota pequeña y realiza ciertas acciones según el contenido de la nota. Por ejemplo, la lámpara está rota y el proceso se utiliza para recordar al proceso que use la linterna.
(Por supuesto, puede ignorar completamente esta nota, pero en una emergencia como un incendio, ignorar la señal no es una buena opción). En comparación con otros métodos de comunicación entre procesos (como tuberías, memoria compartida), la información que puede pasar la señal es aproximada, solo un número entero. Pero debido a la pequeña cantidad de información transmitida, la señal también es fácil de administrar y usar. Por lo tanto, las señales a menudo se utilizan para tareas relacionadas con la administración del sistema, como la terminación del proceso de notificación, la suspensión o la recuperación, etc.

Dame una señal

La señal es administrada por el núcleo. Las señales se pueden generar de varias formas. El núcleo puede generarlas, como errores de hardware (como divisiones con un denominador de 0 o un error de segmentación). El núcleo debe notificar un proceso; también puede generarse mediante otros procesos. , enviado al kernel, y luego pasado al proceso de destino por el kernel. Hay una tabla en el kernel para cada proceso para almacenar información relacionada (el buzón de la sala). Cuando el kernel necesita pasar una señal a un proceso, escribe una señal (conectada a la tira) en la posición apropiada en la tabla correspondiente del proceso, y se genera la señal. Cuando el proceso ejecuta la llamada del sistema, cuando se sale del núcleo después de que se completa la llamada del sistema, la información en el buzón se verificará por cierto. Si hay una señal, el proceso realizará la acción de la señal (también llamada disposición de la señal), que se llama la señal de entrega. Desde el momento en que se genera la señal hasta el momento en que se transmite la señal, la señal se encuentra en un estado pendiente (la banda aún no se ha visto). También podemos diseñar programas que hacen que el proceso generado bloquee ciertas señales, es decir, que mantengan estas señales en estado de espera hasta que el proceso desbloquee o ignore la señal.

Señales comunes

A cada entero que pasa una señal se le asigna un significado especial y tiene un nombre de señal que corresponde a un entero. Las señales comunes son SIGINT, SIGQUIT, SIGCONT, SIGTSTP, SIGALRM, etc. Estos son los nombres de las señales. Puede usar el código

de la siguiente manera:

$ man 7 signal

para ver más señales.

En las señales anteriores,

SIGINT Cuando el teclado presiona CTRL + C para enviar una señal desde el shell, la señal pasa al proceso de ejecución en primer plano en el shell. La operación predeterminada correspondiente a la señal es Interrumpir (INTERRUPCIÓN) El proceso.

SIGQUIT Cuando el teclado presiona CTRL + \\ para señalar desde el shell, la señal pasa al proceso de ejecución en primer plano en el shell. La acción predeterminada para la señal correspondiente es salir (SALIR) del proceso.

SIGTSTP Cuando el teclado presiona CTRL + Z para señalar desde el shell, la señal pasa al proceso de ejecución en primer plano en el shell. La acción predeterminada para la señal correspondiente es DETENER el proceso.

SIGCONT se utiliza para notificar el proceso suspendido para continuar.

SIGALRM actúa como un temporizador, generalmente después de que el programa haya generado la señal después de un cierto tiempo.

Uso de señales en el shell

En realidad, apliquemos la señal. Ejecutamos ping en el shell:

El código es el siguiente:

$ ping localhost

En este punto, podemos pasar SIGTSTP al proceso a través de CTRL + Z. El shell muestra:

El código es el siguiente:

[1] + Stopped ping localhost

Usamos $ ps para consultar el PID del proceso de ping (PID es el número de habitación del proceso de ping) ), en mi máquina es 27397

Podemos usar el comando $ kill en el shell para indicar un proceso:

El código es el siguiente:

$ kill - SIGCONT 27397

para pasar la señal SIGCONT al proceso de ping.

Disposición de la señal

En el ejemplo anterior, todas las señales realizan la acción predeterminada de la señal correspondiente. Pero esto no es absoluto. Cuando el proceso decide ejecutar la señal, hay varias posibilidades:

1) Ignorar (ignorar) la señal, la señal se borra, el proceso en sí no realiza ninguna operación especial

2) Predeterminado ( Operación predeterminada). Cada señal corresponde a una determinada operación por defecto. Por ejemplo, SIGCONT anterior se utiliza para continuar el proceso.

3) Personaliza la operación. También se llama una señal de captura. La operación correspondiente a la señal preestablecida en el proceso de ejecución.

Qué tipo de operación tomará el proceso, de acuerdo con el diseño del programa. Especialmente en el caso de la adquisición de señales, los programas tienden a configurar algunas operaciones largas y complicadas (generalmente ponen estas operaciones en una función).

Las señales se utilizan a menudo para la administración del sistema, por lo que su contenido es bastante complejo. La comprensión profunda de la señal requiere un cierto conocimiento de la programación del entorno Linux.

Resumen

Mecanismo de señalización: generar, entregar, pendiente, bloquear

señal de acción /dispositivo; ignorar, acción predeterminada, capturar señal de

$ kill < Br>

Lo anterior es la introducción del mecanismo de señal de Linux. El mecanismo de señal de Linux es mucho más complicado de lo que se imagina. Es difícil hablar de algunas páginas. Si está interesado en el mecanismo de señal de Linux, puede encontrar libros relacionados. Entender

Copyright © Conocimiento de Windows All Rights Reserved