Señales de Linux



comando de matar

En Tipo Unix sistemas operativos como Linux , señales están software interrumpe. Proporcionan una forma para que el usuario (o un proceso) se comunique directamente con un proceso.



El software puede programarse para responder de manera inteligente a una amplia gama de señales, y ciertas señales hacen que los procesos se comporten de una manera estandarizada y predefinida a nivel de kernel.

Descripción

Las señales de proceso se desarrollaron como parte de UNIX en los 1970s. Se utilizan en todos los sistemas operativos modernos similares a Unix, incluidos Linux , BSD y macOS X.



Cuando se envía una señal a un proceso, el sistema operativo interrumpe el flujo normal de ejecución del proceso y entrega la notificación. Si el proceso ha registrado previamente una forma de manejar esa señal en particular, eso rutina se ejecuta, de lo contrario, el sistema ejecuta el manejador de señales predeterminado.

Las señales se pueden enviar con el matar comando, que lleva el nombre de su señal predeterminada ( SIGKILL ) que indica al sistema operativo que finalice forzosamente un proceso antes de hacer cualquier otra cosa.



Los nombres de las señales suelen abreviarse sin sus SIG prefijo, por ejemplo, 'KILL', incluido en los argumentos de comando de matar .

Encontrar señales específicas del sistema

Las señales se definen en la biblioteca del sistema señal.h . Para ver las señales utilizadas por su sistema operativo, abra una terminal y ejecute señal de hombre o hombre 7 señal .

Señales en Linux

Señal Número Descripción Estándar
SIGHUP 1 La HUP La señal se envía a un proceso cuando su terminal de control está cerrada. Originalmente fue diseñado para notificar una caída de línea serial ( HUP significa 'Colgar'). En los sistemas modernos, esta señal generalmente indica que el pseudo terminal o virtual de control está cerrado. POSIX
SIGINT 2 La EN T la señal es enviada a un proceso por su terminal de control cuando un usuario quiere interrumpir el proceso. Esta señal a menudo se inicia presionando Ctrl + C , pero en algunos sistemas, se puede usar el carácter 'borrar' o la tecla 'romper'. ANSI
SIGQUIT 3 La DEJAR La señal es enviada a un proceso por su terminal de control cuando el usuario solicita que el proceso realice una volcado de memoria . POSIX
SELLO 4 Instrucción ilegal. La ENFERMO La señal se envía a un proceso cuando intenta ejecutar un error de formato, desconocido o privilegiado. instrucción . ANSI
SIGTRAP 5 Trampa de rastreo. La TRAMPA La señal se envía a un proceso cuando surge una condición que un depurador está rastreando, por ejemplo, cuando un función se ejecuta, o cuando un particular variable cambia de valor. POSIX
SIGABRT ,
SIGIOT
6 Abortar proceso. ABRT es generalmente enviado por el proceso mismo, cuando llama al aborto() llamada al sistema para señalar una terminación anormal, pero puede enviarse desde cualquier proceso como cualquier otra señal. SIGIOT es sinónimo de SIGABRT. ( IOT significa trampa de entrada / salida, una señal que se originó en el PDP-11.) 4.2 BSD
SIGBUS 7 La AUTOBÚS La señal se envía a un proceso cuando provoca una autobús error, como un error memoria alineación de acceso o dirección física inexistente. En Linux, esta señal se asigna a SIGUNUSED, porque los errores de acceso a la memoria de este tipo no son posibles. 4.2 BSD
SIGFPE 8 Excepción de coma flotante. La FPB La señal se envía a un proceso cuando ejecuta operaciones aritméticas erróneas, como división por cero . ANSI
SIGKILL 9 Terminar forzosamente un proceso. Con DETENER , esta es una de las dos señales que no pueden ser interceptadas, ignoradas o manejadas por el proceso en sí. POSIX
SIGUSR1 10 Señal definida por el usuario 1. Esta es una de las dos señales designadas para el manejo personalizado de la señal del usuario. POSIX
SIGSEGV 11 La SEGV La señal se envía a un proceso cuando hace una referencia de memoria virtual no válida, o falla de segmentación, es decir, cuando realiza una violación de segmentación.
SIGUSR2 12 Señal definida por el usuario 2. Ésta es una de las dos señales designadas para el manejo personalizado de la señal del usuario. POSIX
SIGPIPE 13 La TUBO La señal se envía a un proceso cuando intenta escribir en una tubería sin un proceso conectado al otro extremo. POSIX
SIGALRM 14 La ALRM señal notifica a un proceso que el intervalo de tiempo especificado en una llamada al alarma() la función del sistema ha expirado. POSIX
SIGTERM 15 La TÉRMINO Se envía una señal a un proceso para solicitar su terminación. A diferencia del MATAR señal, puede ser captada e interpretada o ignorada por el proceso. Esta señal permite que el proceso realice una terminación agradable liberando recursos y guardando el estado si corresponde. se debe notar que SIGINT es casi idéntico a SIGTERM . ANSI
SIGSTKFLT 16 Fallo de pila. Se asigna a SIGUNUSED en Linux.
SIGCHLD 17 La CHLD La señal se envía a un proceso cuando un proceso hijo termina, se interrumpe o se reanuda después de haber sido interrumpido. Un uso común de la señal es indicar al sistema operativo que limpie los recursos utilizados por un proceso hijo después de su terminación sin una llamada explícita a la llamada del sistema de espera. POSIX
SIGCONT 18 Continuar ejecutando después de detener, por ejemplo, por DETENER POSIX
SIGSTOP 19 La DETENER La señal indica al sistema operativo que detenga un proceso para reanudarlo más tarde. Esta es una de las dos señales, junto con MATAR que no puede ser interceptado, ignorado o manejado por el proceso mismo. POSIX
SIGTSTP 20 La TSTP su terminal de control envía una señal a un proceso para solicitar que se detenga temporalmente. Comúnmente lo inicia el usuario presionando Ctrl + Z . a diferencia de SIGSTOP , este proceso puede registrar un manejador de señales para o ignorar la señal. POSIX
SIGTTIN 21 La TTIN La señal se envía a un proceso cuando intenta leer desde el tty mientras está en segundo plano. Esta señal solo puede ser recibida por procesos bajo control de trabajo. Los demonios no tienen terminales de control y nunca deberían recibir esta señal. POSIX
SIGTTOU 22 TTOU La señal se envía a un proceso cuando intenta escribir desde el tty mientras está en segundo plano. El cumplido a TTIN . POSIX
SIGURG 23 La URG se envía una señal a un proceso cuando enchufe tiene urgencia o fuera de banda datos disponible para leer. 4.2 BSD
SIGXCPU 24 La XCPU La señal se envía a un proceso cuando se ha agotado el UPC por una duración que excede un cierto valor predeterminado establecido por el usuario. La llegada de un XCPU La señal proporciona al proceso de recepción la oportunidad de guardar rápidamente cualquier resultado intermedio y salir con gracia, antes de que el sistema operativo lo termine utilizando la señal SIGKILL. 4.2 BSD
SIGXFSZ 25 La XFSZ La señal se envía a un proceso cuando crece un expediente más grande que el tamaño máximo permitido. 4.2 BSD
SIGVTALRM 26 Despertador virtual. Puede ser enviado por el alarma() llamada al sistema. De forma predeterminada, esta señal mata el proceso, pero está diseñada para usarse con el manejo de señales específico del proceso. 4.2 BSD
SIGPROF 27 Despertador de perfilado. Indica la expiración de un temporizador que mide el tiempo de CPU utilizado por el proceso actual (tiempo de 'usuario') y el tiempo de CPU gastado en nombre del proceso por el sistema (tiempo de 'sistema'). Estos tiempos se pueden utilizar para implementar funciones de creación de perfiles de código. De forma predeterminada, esta señal finaliza el proceso, pero está diseñada para usarse con el manejo de señales específicas del proceso. 4.2 BSD
SIGWINCH 28 Cambio de ventana. La CABRESTANTE La señal se envía a un proceso cuando su terminal de control cambia de tamaño, por ejemplo, si lo cambia de tamaño en su administrador de ventanas. 4.3 BSD, dom.
SIGIO ,
SIGPOLL
29 Ahora es posible la entrada / salida. SIGPOLL es sinónimo de SIGIO, y en Linux su comportamiento es idéntico al de SIGURG. 4.2 BSD
SIGPWR ,
SIGLOST
30 Fallo de alimentación. La PWR La señal se envía a un proceso cuando el sistema detecta un corte de energía. SIGLOST es un sinónimo de SIGPWR. Sistema V
SIGNUS ,
SIGSYS
31 Señal no utilizada. Esta señal se proporciona por razones de compatibilidad, por ejemplo, cuando se transfiere software de un sistema operativo con señales diferentes o no admitidas en Linux. En Linux, SIGSYS es sinónimo de SIGUNUSED. Sistema V r4

Señales no admitidas por Linux

Las siguientes señales pueden ser utilizadas por otros sistemas, como BSD, pero se interpretan como SIGNUS en Linux.

SIGEMT La EMT La señal se envía a un proceso cuando ocurre una trampa del emulador. No utilizado en Linux.
SIGINFO La INFO La señal se envía a un proceso cuando se recibe una solicitud de estado desde el terminal de control. No utilizado en Linux
SIGLOST La PERDIÓ la señal se envía a un proceso cuando un archivo cerrar con llave está perdido. No utilizado en Linux.
SIGSYS La SYS La señal se envía a un proceso cuando pasa un argumento incorrecto a una llamada al sistema. No utilizado en Linux.

Envío de señales desde el teclado

Las señales pueden enviarse desde el teclado. A continuación se enumeran varios valores predeterminados estándar. Las combinaciones de teclas predeterminadas para enviar señales de interrupción se pueden definir con el stty mando.

Ctrl-C Enviar SIGINT (Interrumpir). De forma predeterminada, esto provoca la finalización de un proceso.
Ctrl-Z Enviar SIGTSTP (Suspender). De forma predeterminada, esto hace que un proceso suspenda todas las operaciones.
Control- Enviar SIGQUIT (Dejar). De forma predeterminada, esto hace que un proceso finalice inmediatamente y vuelque el centro .
Ctrl-T Enviar SIGINFO (Información). De forma predeterminada, esto hace que el sistema operativo muestre información sobre el comando. No es compatible con todos los sistemas.

Señales en tiempo real

Las señales en tiempo real son un conjunto de señales sin un propósito predefinido, para que los programadores las utilicen como quieran en su software. Dos nombres de señales, SIGRTMIN y SIGRTMAX , defina los números de señal mínimo y máximo de las señales en tiempo real. Por ejemplo, el programador puede usar el número de señal como SIGRTMIN + 3 para referirse al cuarto número de señal en tiempo real.

Ejemplos: enviar señales

La matar El comando envía señales a los procesos. Su shell puede tener una versión incorporada de matar , que reemplaza la versión instalada en / bin / kill . Las dos versiones tienen opciones ligeramente diferentes, pero las funciones básicas son las mismas. Los siguientes ejemplos pueden ejecutarse con cualquiera de las versiones de matar .

El proceso a señalizar se denomina PID (ID de proceso). Si no está seguro del ID del proceso, puede encontrarlo con el ps comando, por ejemplo ps -aux .

|_+_|

Envía el MATAR señal al proceso con PID 1234 .

|_+_|

Mata tres procesos: PID 123 , 456 , y 789 .

|_+_|

Enviar número de señal 15 ( TÉRMINO ) a los procesos 1234 y 5678 .

|_+_|

Igual que el comando anterior.

|_+_|

Enumere todas las señales disponibles. Salida de ejemplo:

|_+_|

matar -9 -1

El ID de proceso especial -1 se refiere a todos los procesos que no sean matar y el proceso de raíz del sistema. Este comando intenta matar ( -9 ) todos los procesos posibles ( -1 ) en el sistema. Para obtener más información, consulte la documentación de matar , vinculado a continuación.

matar - Finalizar un proceso.
stty - Cambiar la configuración de la línea del terminal.