NOMBRE¶
signal - lista de las señales disponibles
DESCRIPCIÓN¶
Linux permite tanto las señales POSIX confiables (de aquí en
adelante "señales estándar") como las señales
POSIX en tiempo real.
Señales Estándar¶
Linux soporta las señales estándar listadas a continuación.
Muchos números de señales dependen de la arquitectura, tal como
se indica en la columna "Valor". (Donde aparezcan tres valores, el
primero de ellos es válido normalmente para alpha y sparc, el segundo
para i386, ppc y sh, y el último para mips. Un - indica que una
señal no está presente en la arquitectura correspondiente.)
Las entradas en la columna "Acción" de la tabla especifican la
acción por defecto para la señal de la siguiente manera:
- Term
- La acción por defecto es terminar el proceso.
- Ign
- La acción por defecto es ignorar la señal.
- Core
- La acción por defecto es terminar el proceso y realizar un volcado
de memoria.
- Stop
- La acción por defecto es detener el proceso.
En primer lugar se listan las señales descritas en el estándar
POSIX.1 original.
Señal |
Valor |
Acción |
Comentario |
|
|
|
|
SIGHUP |
1 |
Term |
Cuelgue detectado en la terminal de |
|
|
|
control o muerte del proceso de control |
SIGINT |
2 |
Term |
Interrupción procedente del teclado |
SIGQUIT |
3 |
Core |
Terminación procedente del teclado |
SIGILL |
4 |
Core |
Instrucción ilegal |
SIGABRT |
6 |
Core |
Señal de aborto procedente de abort(3) |
SIGFPE |
8 |
Core |
Excepción de coma flotante |
SIGKILL |
9 |
Term |
Señal de matar |
SIGSEGV |
11 |
Core |
Referencia inválida a memoria |
SIGPIPE |
13 |
Term |
Tubería rota: escritura sin lectores |
SIGALRM |
14 |
Term |
Señal de alarma de alarm(2) |
SIGTERM |
15 |
Term |
Señal de terminación |
SIGUSR1 |
30,10,16 |
Term |
Señal definida por usuario 1 |
SIGUSR2 |
31,12,17 |
Term |
Señal definida por usuario 2 |
SIGCHLD |
20,17,18 |
Ign |
Proceso hijo terminado o parado |
SIGCONT |
19,18,25 |
|
Continuar si estaba parado |
SIGSTOP |
17,19,23 |
Stop |
Parar proceso |
SIGTSTP |
18,20,24 |
Stop |
Parada escrita en la tty |
SIGTTIN |
21,21,26 |
Stop |
E. de la tty para un proc. de fondo |
SIGTTOU |
22,22,27 |
Stop |
S. a la tty para un proc. de fondo |
Las señales
SIGKILL y
SIGSTOP no pueden ser capturadas,
bloqueadas o ignoradas.
A continuación se listan las señales que no aparecen en el
estándar POSIX.1 pero que son descritas en SUSv2 y SUSv3 / POSIX
1003.1-2001.
Señal |
Valor |
Acción |
Comentario |
|
|
|
|
SIGBUS |
10,7,10 |
Core |
Error de bus (acceso a memoria inválido) |
SIGPOLL |
|
Term |
Evento que se puede consultar (Sys V). |
|
|
|
Sinónimo de SIGIO |
SIGPROF |
27,27,29 |
A |
Ha expirado el reloj de perfilado |
|
|
|
(profiling) |
SIGSYS |
12,-,12 |
C |
Argumento de rutina inválido (SVID) |
SIGTRAP |
5 |
Core |
Trampa de traza/punto de ruptura |
SIGURG |
16,23,21 |
B |
Condición urgente en conector (4.2 BSD) |
SIGVTALRM |
26,26,28 |
A |
Alarma virtual (4.2 BSD) |
SIGXCPU |
24,24,30 |
C |
Límite de tiempo de CPU excedido |
|
|
|
(4.2 BSD) |
SIGXFSZ |
25,25,31 |
C |
Límite de tamaño de fichero excedido |
|
|
|
(4.2 BSD) |
En las versiones de Linux anteriores a la 2.2 (incluida ésta) el
comportamiento por defecto para
SIGSYS,
SIGXCPU,
SIGXFSZ,
y (en otras arquitecturas distintas a SPARC y MIPS)
SIGBUS era terminar
el proceso (sin realizar un volcado de memoria). (En otros Unix's la
acción por defecto para
SIGXCPU y
SIGXFSZ es terminar el
proceso sin realizar un volcado de memoria.) Linux 2.4 cumple los requisitos
del estándar POSIX 1003.1-2001 con respecto a estas señales,
terminando el proceso con un volcado de memoria.
A continuación otras señales.
Señal |
Valor |
Acción |
Comentario |
|
|
|
|
SIGIOT |
6 |
Core |
Trampa IOT. Un sinónimo de SIGABRT |
SIGEMT |
7,-,7 Term |
|
|
SIGSTKFLT |
-,16,- |
Term |
Fallo de la pila en el coprocesador (no usada) |
SIGIO |
23,29,22 |
Term |
E/S permitida ya (4.2 BSD) |
SIGCLD |
-,-,18 |
Ign |
Un sinónimo de SIGCHLD |
SIGPWR |
29,30,19 |
Term |
Fallo de corriente eléctrica (System V) |
SIGINFO |
29,-,- |
|
Un sinónimo para SIGPWR |
SIGLOST |
-,-,- |
Term |
Bloqueo de fichero perdido. |
SIGWINCH |
28,28,20 |
Ign |
Señal de reescalado de la ventana (4.3 BSD, Sun) |
SIGUNUSED |
-,31,- |
Term |
Señal no usada. |
(La señal 29 es
SIGINFO /
SIGPWR en la arquitectura alpha
pero
SIGLOST en sparc.)
La señal
SIGEMT no está especificada en el estándar
POSIX 1003.1-2001, pero sin embargo aparece en la mayoría de Unix's,
donde su comportamiento por defecto es habitualmente terminar el proceso sin
realizar un volcado de memoria.
La señal
SIGPWR (que no está especificada en el
estándar POSIX 1003.1-2001) es ignorada habitualmente por defecto en
aquellos Unix's donde aparece.
La señal
SIGIO (que no está especificada en el
estándar POSIX 1003.1-2001) es ignorada por defecto en muchos Unix's.
Señales en Tiempo real¶
Linux soporta señales en tiempo real tal como está definido
originalmente en las extensiones de tiempo real de POSIX.4 (ahora incluidas en
POSIX 1003.1-2001). Linux soporta 32 señales en tiempo real, numeradas
del 32 (
SIGRTMIN) al 63 (
SIGRTMAX). (Los programas deben hacer
referencia siempre a las señales en tiempo real usando la
notación
SIGRTMIN+n, puesto que el rango de números de
señales en tiempo real varía entre sistemas Unix's.)
A diferencia de las señales estándar, las señales en tiempo
real no tienen un significado predefinido: el conjunto al completo de
señales en tiempo real puede usarse para propósitos definidos
por la aplicación. (Observe, sin embargo, que la implementación
LinuxThreads usa las tres primeras señales en tiempo real.)
La acción por defecto para una señal en tiempo real no manejada es
terminar el proceso receptor.
Las señales en tiempo real se distinguen por lo siguiente:
- 1.
- Varias instancias de señales en tiempo real pueden ser puestas en
cola. En contraste, si varias instancias de una señal
estándar llegan mientras esa señal está siendo
bloqueada, solamente la primera de ellas es puesta en cola.
- 2.
- Si la señal se envía usando sigqueue(2), puede
enviarse con la señal un valor (bien un entero o un puntero). Si el
proceso receptor establece un manejador para esta señal usando la
bandera SA_SIGACTION en sigaction(2) puede obtener estos
datos a través del campo si_value de la estructura
siginfo_t pasada como segundo argumento al manejador.
Además, los campos si_pid y si_uid de esta estructura
pueden usarse para obtener el identificador de proceso y el identificador
de usuario real del proceso que envía la señal.
- 3.
- Las señales en tiempo real se entregan en un orden garantizado.
Varias señales en tiempo real del mismo tipo llegan en el orden en
que fueron enviadas. Si se envían diferentes señales en
tiempo real a un proceso, se comunican comenzando por la que tenga menor
número. (es decir, las señales con número bajo tienen
mayor prioridad.)
Si hay señales estándar y en tiempo real pendientes para un
proceso, POSIX deja indefinido cuál es entregada en primer lugar.
Linux, como otras muchas implementaciones, da prioridad a las señales
estándar en este caso.
Según POSIX, una implementación debería permitir que
pudieran entrar en la cola de un proceso al menos _POSIX_SIGQUEUE_MAX (32)
señales en tiempo real. Sin embargo, en lugar de establecer un
límite por proceso, Linux impone un límite para todo el sistema
sobre el número de señales en tiempo real que puede haber en la
cola para todos los procesos. Este límite puede ser consultado (y con
privilegios) modificado a través del fichero
/proc/sys/kernel/rtsig-max. Un fichero relacionado,
/proc/sys/kernel/rtsig-nr, puede ser usado para averiguar
cuántas señales en tiempo real están actualmente en cola.
POSIX.1
FALLOS¶
SIGIO y
SIGLOST tienen el mismo valor. Este último
está comentado en las fuentes del núcleo, pero el proceso de
construcción de algunos programas aún piensa que la señal
29 es
SIGLOST.
VÉASE TAMBIÉN¶
kill(1),
kill(2),
setitimer(2),
sigaction(2),
signal(2),
sigprocmask(2),
sigqueue(2)