Sinal - Comando Linux / Unix

Linux admite ambos os sinais confiables POSIX (en diante "sinais estándar") e os sinais POSIX en tempo real.

Sinais estándar

Linux admite os sinais estándar enumerados a continuación. Varios números de sinal dependen da arquitectura, como se indica na columna "Valor". (Cando se dan tres valores, o primeiro xeralmente é válido para alfa e sparc, o medio para i386, ppc e sh e o último para mips.

A - denota que falta un sinal na arquitectura correspondente).

As entradas na columna "Acción" da táboa especifican a acción predeterminada do sinal, do seguinte xeito:

Prazo

A acción predeterminada é terminar o proceso.

Ign

A acción predeterminada é ignorar o sinal.

Core

A acción por defecto é terminar o proceso e descargar o núcleo.

Parar

A acción predeterminada é deter o proceso.

Primeiro os sinais descritos no estándar orixinal POSIX.1.

Sinal Valor Acción Comentario
ou morte de proceso de control
SIGINT 2 Prazo Interrupción do teclado
SIGQUIT 3 Core Saír do teclado
SIGILL 4 Core Instrución ilegal
SIGABRT 6 Core Abortar o sinal do aborto (3)
SIGFPE 8 Core Excepción de punto flotante
SIGKILL 9 Prazo Mata o sinal
SIGSEGV 11 Core Referencia de memoria non válida
SIGPIPE 13 Prazo Tubo roto: escribe a canalización sen lectores
SIGALRM 14 Prazo Sinal do cronómetro da alarma (2)
SIGTERM 15 Prazo Sinal de terminación
SIGUSR1 30,10,16 Prazo Sinal definido polo usuario 1
SIGUSR2 31,12,17 Prazo Sinal definido polo usuario 2
SIGCHLD 20,17,18 Ign Neno detido ou rescindido
SIGCONT 19,18,25 Continúa se parou
SIGSTOP 17,19,23 Parar Detén o proceso
SIGTSTP 18,20,24 Parar Deixar de escribir en tty
SIGTTIN 21,21,26 Parar Entrada tty para o proceso de fondo
SIGTTOU 22,22,27 Parar saída tty para o proceso de fondo

Os sinais SIGKILL e SIGSTOP non poden ser capturados, bloqueados nin ignorados.

A continuación, os sinais non están no estándar POSIX.1, pero descritos en SUSv2 e SUSv3 / POSIX 1003.1-2001.

Sinal Valor Acción Comentario
SIGPOLL Prazo Evento polível (Sys V). Sinónimo de SIGIO
SIGPROF 27,27,29 Prazo O temporizador de perfilado caducou
SIGSYS 12, -, 12 Core Argumento malo para a rutina (SVID)
SIGTRAP 5 Core Trampa / trampa para punto de ruptura
SIGURG 16,23,21 Ign Condición urxente no socket (4.2 BSD)
SIGVTALRM 26,26,28 Prazo Alarma virtual (4.2 BSD)
SIGXCPU 24,24,30 Core O límite de tempo da CPU excedeu (4.2 BSD)
SIGXFSZ 25,25,31 Core O límite do tamaño do ficheiro excedeu (4.2 BSD)

Ata o de Linux 2.2 incluído, o comportamento predeterminado para SIGSYS , SIGXCPU , SIGXFSZ e (en arquitecturas distintas de SPARC e MIPS) SIGBUS debía rescindir o proceso (sen un vertedoiro central). (Nalgún outro Unices a acción predeterminada para SIGXCPU e SIGXFSZ é terminar o proceso sen dump core). Linux 2.4 cumpre cos requisitos POSIX 1003.1-2001 para estes sinais, terminando o proceso cun vertedoiro central.

A continuación móstranse outros sinais.

Sinal Valor Acción Comentario
SIGEMT 7, -, 7 Prazo
SIGSTKFLT -, 16, - Prazo Fallou a falla no coprocesador (non se usa)
SIGIO 23,29,22 Prazo E / S agora posible (4.2 BSD)
SIGCLD -, -, 18 Ign Sinónimo de SIGCHLD
SIGPWR 29,30,19 Prazo Falla de enerxía (Sistema V)
SIGINFO 29, -, - Sinónimo de SIGPWR
SIGLOST -, -, - Prazo Bloqueo de ficheiros perdido
SIGWINCH 28,28,20 Ign Sintaxe de tamaño da xanela (4.3 BSD, Sol)
SIGUNUSED -, 31, - Prazo Sinal non utilizado (será SIGSYS)

(O sinal 29 é SIGINFO / SIGPWR nunha alfa pero SIGLOST nun sparc).

O SIGEMT non está especificado no POSIX 1003.1-2001, pero nunca aparece na maioría dos outros Unices, onde a súa acción por defecto adoita terminar o proceso cun vertedoiro central.

O SIGPWR (que non está especificado no POSIX 1003.1-2001) normalmente ignórase por defecto noutros Unices onde aparece.

SIGIO (que non está especificado en POSIX 1003.1-2001) ignórase de forma predeterminada noutros outros Unices.

Sinais en tempo real

Linux admite sinais en tempo real como se definiu orixinalmente nas extensións POSIX.4 en tempo real (e agora está incluído no POSIX 1003.1-2001). Linux admite 32 sinais en tempo real, numerados de 32 ( SIGRTMIN ) a 63 ( SIGRTMAX ). (Os programas sempre deben referirse a sinais en tempo real usando a notación SIGRTMIN + n, xa que o rango de números de sinal en tempo real varía en Unices).

A diferenza dos sinais estándar, os sinais en tempo real non teñen significados predefinidos: todo o conxunto de sinais en tempo real pódese usar para fins definidos pola aplicación. (Nótese, non obstante, que a implementación de LinuxThreads usa os tres primeiros sinais en tempo real.)

A acción predeterminada dun sinal en tempo real non controlado é terminar o proceso de recepción.

Os sinais en tempo real distínguense dos seguintes:

  1. Múltiples casos de sinais en tempo real pódense cola. Pola contra, se se emiten varias instancias dun sinal estándar mentres que o sinal está bloqueado actualmente, só unha instancia está en cola.
  2. Se o sinal é enviado usando sigqueue (2), un sinal pode enviarse un valor de acompañamento (ou un enteiro ou un punteiro). Se o proceso de recepción establece un controlador para este sinal usando o indicador SA_SIGACTION para sigaction (2), entón pode obter estes datos a través do campo sin_value da estrutura siginfo_t pasada como segundo argumento ao controlador. Ademais, os campos si_pid e si_uid desta estrutura pódense usar para obter o ID PID e usuario real do proceso que envía o sinal.
  3. Os sinais en tempo real entréganse de forma garantida. Múltiples sinais en tempo real do mesmo tipo entréganse na orde en que foron enviados. Se se envían diferentes sinais en tempo real a un proceso, entréganse a partir do sinal máis baixo. (É dicir, os sinais de número reducido teñen a máxima prioridade).

Se os sinais estándares e en tempo real están pendentes dun proceso, POSIX deixa que non se especifique o que se entrega primeiro. Linux, como moitas outras implementacións, dá prioridade aos sinais estándar neste caso.

De acordo con POSIX, unha implementación debería permitir que, polo menos, _POSIX_SIGQUEUE_MAX (32) sinais en tempo real se cola a un proceso. Non obstante, no canto de poñer un límite por proceso, Linux impón un límite de todo o sistema sobre o número de sinais en tempo real en cola para todos os procesos.

Este límite pode ser visto (e con privilexio) modificado a través do ficheiro / proc / sys / kernel / rtsig-max . Un ficheiro relacionado, / proc / sys / kernel / rtsig-max , pódese usar para descubrir cantos sinais en tempo real están en cola.

CONFORME A

POSIX.1

Importante: use o comando man ( % home ) para ver como se usa un comando na súa computadora particular.