Linux admite tanto señales confiables de POSIX (en adelante "señales estándar") como señales de POSIX en tiempo real.
Señales Estándar
Linux admite las señales estándar enumeradas a continuación. Varios números de señal dependen de la arquitectura, como se indica en la columna "Valor". (Cuando se dan tres valores, el primero suele ser válido para alfa y sparc, el medio para i386, ppc y sh, y el último para mips.
A - denota que una señal está ausente en la arquitectura correspondiente.)
Las entradas en la columna "Acción" de la tabla especifican la acción predeterminada para la señal, de la siguiente manera:
Término
La acción por defecto es terminar el proceso.
Ign
La acción por defecto es ignorar la señal.
Núcleo
La acción predeterminada es terminar el proceso y volcar el núcleo.
Detener
La acción por defecto es detener el proceso.
Primero las señales descritas en el estándar POSIX.1 original.
Señal | Valor | Acción | Comentario |
o muerte del proceso de control | |||
SIGINT | 2 | Término | Interrumpir desde el teclado |
SIGQUIT | 3 | Núcleo | Salir del teclado |
SIGILL | 4 | Núcleo | Instrucción ilegal |
SIGABRT | 6 | Núcleo | Abortar señal de abortar (3) |
SIGFPE | 8 | Núcleo | Excepción de punto flotante |
SIGKILL | 9 | Término | Señal de matar |
SIGSEGV | 11 | Núcleo | Referencia de memoria inválida |
SIGPIPE | 13 | Término | Tubería rota: escribir en tubería sin lectores |
SIGALRM | 14 | Término | Señal del temporizador de alarma (2) |
Sigma | 15 | Término | Señal de terminación |
SIGUSR1 | 30,10,16 | Término | Señal definida por el usuario 1 |
SIGUSR2 | 31,12,17 | Término | Señal definida por el usuario 2 |
SIGCHLD | 20,17,18 | Ign | Niño detenido o terminado |
SIGCONT | 19,18,25 | Continuar si se detiene | |
SIGSTOP | 17,19,23 | Detener | Detener el proceso |
SIGTSTP | 18,20,24 | Detener | Deja de escribir en tty |
SIGTTIN | 21,21,26 | Detener | entrada tty para proceso de fondo |
SIGTTOU | 22,22,27 | Detener | salida tty para proceso de fondo |
Las señalesSIGKILL ySIGSTOP no puede ser atrapado, bloqueado o ignorado.
A continuación, las señales no están en el estándar POSIX.1 pero se describen en SUSv2 y SUSv3 / POSIX 1003.1-2001.
Señal | Valor | Acción | Comentario |
SIGPOLL | Término | Acto policial (Sys V). Sinónimo de SIGIO | |
SIGPROF | 27,27,29 | Término | Temporizador de perfiles expirado |
SIGSYS | 12,-,12 | Núcleo | Mal argumento a la rutina (SVID) |
SIGTRAP | 5 | Núcleo | Traza / trampa de punto de ruptura |
SIGURG | 16,23,21 | Ign | Condición urgente en zócalo (4.2 BSD) |
SIGVTALRM | 26,26,28 | Término | Despertador virtual (4.2 BSD) |
SIGXCPU | 24,24,30 | Núcleo | Límite de tiempo de CPU excedido (4.2 BSD) |
SIGXFSZ | 25,25,31 | Núcleo | Límite de tamaño de archivo excedido (4.2 BSD) |
Hasta e incluyendo Linux 2.2, el comportamiento predeterminado paraSIGSYS, SIGXCPU, SIGXFSZ, y (en arquitecturas distintas de SPARC y MIPS)SIGBUS Era para terminar el proceso (sin un volcado de núcleo). (En algunos otros Unices la acción por defecto paraSIGXCPU ySIGXFSZ es terminar el proceso sin un volcado de núcleo.) Linux 2.4 cumple con los requisitos POSIX 1003.1-2001 para estas señales, terminando el proceso con un volcado de núcleo.
A continuación varias otras señales.
Señal | Valor | Acción | Comentario |
SIGEMT | 7,-,7 | Término | |
SIGSTKFLT | -,16,- | Término | Fallo de pila en el coprocesador (no utilizado) |
SIGIO | 23,29,22 | Término | E / S ahora es posible (4.2 BSD) |
SIGCLD | -,-,18 | Ign | Un sinónimo para SIGCHLD |
SIGPWR | 29,30,19 | Término | Fallo de alimentación (Sistema V) |
SIGINFO | 29,-,- | Un sinónimo para SIGPWR | |
SIGLOST | -,-,- | Término | Bloqueo de archivo perdido |
SIGWINCH | 28,28,20 | Ign | Señal de redimensionamiento de ventana (4.3 BSD, Sol) |
SIGUNUS | -,31,- | Término | Señal no utilizada (será SIGSYS) |
(La señal 29 esSIGINFO / SIGPWR en un alfa peroSIGLOST en un sparc.)
SIGEMT no se especifica en POSIX 1003.1-2001, pero de todas formas aparece en la mayoría de los Unices, donde su acción predeterminada suele ser finalizar el proceso con un volcado de memoria.
SIGPWR (que no se especifica en POSIX 1003.1-2001) generalmente se ignora por defecto en aquellos otros Unices donde aparece.
SIGIO (que no se especifica en POSIX 1003.1-2001) se ignora por defecto en otros Unices.
Señales en tiempo real
Linux admite señales en tiempo real como se definió originalmente en las extensiones en tiempo real POSIX.4 (y ahora se incluye en POSIX 1003.1-2001). Linux admite 32 señales en tiempo real, numeradas desde 32 (SIGRTMIN) a 63 (SIGRTMAX). (Los programas siempre deben referirse a señales en tiempo real usando notaciónSIGRTMIN+ n, ya que el rango de números de señal en tiempo real varía entre Unices.)
A diferencia de las señales estándar, las señales en tiempo real no tienen significados predefinidos: todo el conjunto de señales en tiempo real se puede usar para fines definidos por la aplicación. (Sin embargo, tenga en cuenta que la implementación de LinuxThreads utiliza las primeras tres señales en tiempo real).
La acción predeterminada para una señal en tiempo real no controlada es terminar el proceso de recepción.
Las señales en tiempo real se distinguen por lo siguiente:
- Se pueden poner en cola múltiples instancias de señales en tiempo real. Por el contrario, si se envían múltiples instancias de una señal estándar mientras esa señal está actualmente bloqueada, entonces solo se pone en cola una instancia.
- Si la señal se envía usandoseñal(2), se puede enviar un valor de acompañamiento (ya sea un entero o un puntero) con la señal. Si el proceso de recepción establece un controlador para esta señal utilizando elSA_SIGACTION bandera parasigaction(2) entonces puede obtener estos datos a través del si_value campo de la siginfo_t La estructura pasó como segundo argumento al manejador. Además, el si_pid y si_uid Los campos de esta estructura se pueden utilizar para obtener el PID y el ID de usuario real del proceso que envía la señal.
- Las señales en tiempo real se entregan en un orden garantizado. Múltiples señales en tiempo real del mismo tipo se entregan en el orden en que se enviaron. Si se envían diferentes señales en tiempo real a un proceso, se entregan comenzando con la señal con el número más bajo. (Es decir, las señales de bajo número tienen la prioridad más alta.)
Si tanto las señales estándar como las señales en tiempo real están pendientes para un proceso, POSIX deja sin especificar cuál se entrega primero. Linux, como muchas otras implementaciones, da prioridad a las señales estándar en este caso.
Según POSIX, una implementación debe permitir que al menos _POSIX_SIGQUEUE_MAX (32) señales en tiempo real se pongan en cola para un proceso. Sin embargo, en lugar de colocar un límite por proceso, Linux impone un límite para todo el sistema en el número de señales en tiempo real en cola para todos los procesos.
Este límite se puede ver (y con privilegio) modificado a través del / proc / sys / kernel / rtsig-max expediente. Un archivo relacionado, / proc / sys / kernel / rtsig-max , se puede utilizar para averiguar cuántas señales en tiempo real están actualmente en cola.
DE ACUERDO A
POSIX.1
Importante: Utilizar el hombre comando % hombre ) para ver cómo se usa un comando en su computadora en particular.