señal – Comando Linux / Unix


Linux soporta tanto señales POSIX fiables (en adelante “señales estándar”) como señales POSIX en tiempo real.

Señales estándar

Linux soporta las señales estándar listadas a continuación. Varios números de señal dependen de la arquitectura, como se indica en la columna “Valor”. (Donde se dan tres valores, el primero es generalmente válido para alpha y sparc, el del medio para i386, ppc y sh, y el último para mips. A – indica que una señal está ausente en la arquitectura correspondiente.)

Las entradas de la columna “Acción” de la tabla especifican la acción por defecto para la señal, como se indica a continuación:

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 predeterminada es detener el proceso.

En primer lugar, las señales descritas en la norma original POSIX.1.

SignalValueActionCommentor death of controlling process SIGINT 2TermInterrupt from keyboard SIGQUIT 3CoreQuit from keyboard SIGILL 4CoreIllegal Instruction SIGABRT 6CoreAbort señal de abort(3) SIGFPE 8CoreFloating point exception SIGKILL 9TermKill señal SIGSEGV 11CoreInvalid memory reference SIGPIPE 13TermBroken pipe: escribir en la tubería sin lectores SIGALRM 14TermTimer signal from alarm(2) SIGTERM 15TermTermination signal SIGUSR1 30,10,16TérminoSeñal definida por el usuario 1 SIGUSR2 31,12,17TérminoSeñal definida por el usuario 2 SIGCHLD 20,17,18IgnChild detuvo o terminó SIGCONT 19,18,25Continuar si se detuvo SIGSTOP 17,19,23StopStopStop process SIGTSTP 18,20,24StopStopStop tecleado en tty SIGTTIN 21,21,26Stoptty input for background process SIGTTOU 22,22,27Stoptty output for background process

Las señales SIGKILL y SIGSTOP no pueden ser capturadas, bloqueadas o ignoradas.

A continuación, las señales que no se encuentran en la norma POSIX.1, sino que se describen en SUSv2 y SUSv3 / POSIX 1003.1-2001.

SignalValueActionComment SIGPOLL TermPollable event (Sys V). Sinónimo de SIGIO SIGPROF 27,27,29TermProfiling timer expired SIGSYS 12,-,12CoreBad argument to routine (SVID) SIGTRAP 5CoreTrace/breakpoint trap SIGURG 16,23,21IgnUrgent condition on socket (4.2 BSD) SIGVTALRM 26,26,28TermReloj de alarma virtual (4.2 BSD) SIGXCPU 24,24,30CoreCPU tiempo límite excedido (4.2 BSD) SIGXFSZ 25,25,31CoreFile size limit exceeded (4.2 BSD)

Hasta e incluyendo Linux 2.2, el comportamiento por defecto para SIGSYS , SIGXCPU , SIGXFSZ , SIGXFSZ , y (en arquitecturas que no sean SPARC y MIPS), SIGBUS , SIGBUS era terminar el proceso (sin un volcado de núcleo). (En algunos otros Unices la acción por defecto para SIGXCPU y SIGXFSZ es terminar el proceso sin un volcado de núcleo.) Linux 2.4 cumple con los requisitos de POSIX 1003.1-2001 para estas señales, terminando el proceso con un volcado de núcleo.

A continuación varias otras señales.

SignalValueActionComment SIGEMT 7,-,7Term SIGSTKFLT -,16,-TermStack fault on coprocessor (unused) SIGIO 23,29,22TermI/O now possible (4.2 BSD) SIGCLD -,-,18IgnA sinónimo de SIGCHLD SIGPWR 29,30,19Fallo en la alimentación (Sistema V) SIGINFO 29,-Un sinónimo de SIGPWR SIGLOST -,-,-,-TermFile lock lost SIGWINCH 28,28,20IgnWindow redimensionar la señal (4.)3 BSD, Sun) SIGUNUSED -,31,-TermSeñal no utilizada (será SIGSYS)

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

SIGEMT no está especificado en POSIX 1003.1-2001, pero no obstante aparece en la mayoría de los otros Unices, donde su acción por defecto es típicamente terminar el proceso con un volcado de núcleo.

SIGPWR (que no está especificado en POSIX 1003.1-2001) es típicamente ignorado por defecto en aquellos otros Unices donde aparece.

SIGIO (que no está especificado en POSIX 1003.1-2001) se ignora por defecto en varios otros Unices.

Señales en tiempo real

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

A diferencia de las señales estándar, las señales en tiempo real no tienen un significado predefinido: todo el conjunto de señales en tiempo real puede utilizarse 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 por defecto para una señal en tiempo real no manejada es terminar 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, entonces sólo se pone en cola una instancia.
  2. Si la señal se envía utilizando sigqueue (2), se puede enviar un valor acompañante (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 pasado como segundo argumento al controlador. Además, los campos si_pid y si_uid de esta estructura pueden utilizarse para obtener el PID y el ID de usuario real del proceso que envía la señal.
  3. 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 fueron enviadas. Si se envían diferentes señales en tiempo real a un proceso, se envían a partir de la señal con el número más bajo. (Es decir, las señales con números bajos tienen mayor prioridad.)

Si tanto las señales estándar como las en tiempo real están pendientes de un proceso, POSIX deja sin especificar cuál es el primero que se entrega. 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 coloquen en un proceso. Sin embargo, en lugar de poner un límite por proceso, Linux impone un límite en todo el sistema sobre el número de señales en cola en tiempo real para todos los procesos. Este límite se puede ver (y con privilegios) a través del archivo /proc/sys/kernel/rtsig-max. Un archivo relacionado, /proc/sys/kernel/rtsig-max, puede usarse para averiguar cuántas señales en tiempo real están en cola.

CONFORMANDO A

POSIX.1

Importante: Utilice el comando man ( % man) para ver cómo se utiliza un comando en su equipo particular.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *