señal – Comando Linux/Unix

Linux admite señales confiables POSIX (en adelante señales estándar) y señales POSIX en tiempo real. Señales estándar Linux admite las señales estándar que se enumeran a continuación.

Linux admite señales confiables POSIX (en adelante «señales estándar») y señales POSIX en tiempo real.

Señales estándar

Linux admite las señales estándar que se enumeran 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 alpha y sparc, el medio para i386, ppc y sh, y el último para mips. A – indica que no hay una señal 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 predeterminada es terminar el proceso.

Ign

La acción predeterminada es ignorar la señal.

Núcleo

La acción predeterminada es terminar el proceso y volcar el núcleo.

Detener

La acción predeterminada 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 Interrupción desde el teclado
SIGQUIT 3 Core Salir del teclado
SIGILL 4 Core Instrucción ilegal
SIGABRT 6 Core Anular señal de abortar (3)
SIGFPE 8 Core Excepción de coma flotante
SIGKILL 9 Término Señal de muerte
SIGSEGV 11 Core Referencia de memoria no válida
SIGPIPE 13 Término Tubería rota: escriba en la tubería sin lectores
SIGALRM 14 Término Señal del temporizador de alarma (2)
SIGTERM 15 Término Señal de terminación
SIGUSR1 30,10,16 Término Señal 1 definida por el usuario
SIGUSR2 31,12,17 Término Señal 2 definida por el usuario
SIGCHLD 20,17,18 Ign Niño detenido o terminado
SIGCONT 19,18,25 Continuar si se detiene
SIGSTOP 17,19,23 Stop Detener proceso
SIGTSTP 18,20,24 Stop Dejar de escribir en tty
SIGTTIN 21,21,26 Stop entrada tty para el proceso en segundo plano
SIGTTOU 22,22,27 Stop salida tty para el proceso en segundo plano

Las señales SIGKILL y SIGSTOP no pueden capturarse, bloquearse ni ignorarse.

Luego, 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 Evento encuestable (Sys V). Sinónimo de SIGIO
SIGPROF 27,27,29 Término El temporizador de perfilado expiró
SIGSYS 12, -, 12 Core Argumento incorrecto para la rutina (SVID)
SIGTRAP 5 Core Trace/breakpoint trap
SIGURG 16,23,21 Ign Condición urgente en el zócalo (4.2 BSD)
SIGVTALRM 26,26,28 Término Despertador virtual (4.2 BSD)
SIGXCPU 24,24,30 Core Límite de tiempo de CPU excedido (4.2 BSD)
SIGXFSZ 25,25,31 Core Límite de tamaño de archivo excedido (4.2 BSD)

Hasta e incluyendo Linux 2.2, el comportamiento predeterminado para SIGSYS , SIGXCPU , SIGXFSZ y (en arquitecturas distintas a SPARC y MIPS) SIGBUS debía finalizar el proceso (sin un volcado del núcleo). (En algunos otros Unices, la acción predeterminada para SIGXCPU y SIGXFSZ es finalizar el proceso sin un volcado del núcleo). Linux 2.4 cumple con POSIX 1003.1-2001 requisitos para estas señales, terminando el proceso con un volcado de núcleo.

Luego varias otras señales.

Señal Valor Acción Comentario
SIGEMT 7, -, 7 Término
SIGSTKFLT -, 16, – Término Error de pila en el coprocesador (sin usar)
SIGIO 23,29,22 Término E/S ahora posible (4.2 BSD)
SIGCLD -, -, 18 Ign Un sinónimo de SIGCHLD
SIGPWR 29,30,19 Término Falla de energía (Sistema V)
SIGINFO 29, -, – Un sinónimo de SIGPWR
SIGLOST -, -, – Término Bloqueo de archivo perdido
SIGWINCH 28,28,20 Ign Señal de cambio de tamaño de ventana (4.3 BSD, Sun)
SIGUNUSED -, 31, – Término Señal no utilizada (será SIGSYS)

(La señal 29 es SIGINFO / SIGPWR en un alfa pero SIGLOST en un sparc.)

SIGEMT no se especifica en POSIX 1003.1-2001, pero sin embargo aparece en la mayoría de los otros Unices, donde su acción predeterminada es típicamente terminar el proceso con un volcado del núcleo.

SIGPWR (que no se especifica en POSIX 1003.1-2001) generalmente se ignora por defecto en los otros Unices donde aparece.

SIGIO (que no se especifica en POSIX 1003.1-2001) se ignora de forma predeterminada en varios otros Unices.

Señales en tiempo real

Linux admite señales en tiempo real tal como se definieron originalmente en las extensiones en tiempo real POSIX.4 (y ahora incluidas en POSIX 1003.1-2001). Linux admite 32 señales en tiempo real, numeradas del 32 ( SIGRTMIN ) al 63 ( SIGRTMAX ). (Los programas siempre deben referirse a las señales en tiempo real utilizando la notación SIGRTMIN + n, ya que el rango de los números de señal en tiempo real varía según las unidades.)

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 utilizar para fines definidos por la aplicación. (Tenga en cuenta, sin embargo, que la implementación de LinuxThreads utiliza las tres primeras señales en tiempo real).

La acción predeterminada para una señal en tiempo real no controlada es finalizar el proceso de recepción.

Las señales en tiempo real se distinguen por lo siguiente:

  1. Se pueden poner en cola múltiples instancias de señales en tiempo real. Por el contrario, si se entregan varias instancias de una señal estándar mientras esa señal está actualmente bloqueada, solo una instancia se pone en cola.
  2. Si la señal se envía usando sigqueue (2), se puede enviar un valor acompañante (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 el indicador SA_SIGACTION a sigaction (2), entonces 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 se pueden utilizar para obtener el PID y la ID de usuario real del proceso que envía la señal.
  3. Las señales en tiempo real se entregan en un pedido garantizado. Se entregan varias señales en tiempo real del mismo tipo 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 número bajo tienen la máxima prioridad).

Si las señales estándar y en tiempo real están pendientes para un proceso, POSIX lo 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 en un proceso. Sin embargo, en lugar de establecer 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 privilegios) cambiado a través del archivo /proc/sys/kernel/rtsig-max . Se puede usar un archivo relacionado, /proc/sys/kernel/rtsig-max , para averiguar cuántas señales en tiempo real están actualmente en cola.

DE ACUERDO A

POSIX.1

Importante: use el comando man (% man ) para ver cómo se usa un comando en su computadora en particular.

Rate article
labsfabs.com
Add a comment