Senyal - Comando Linux / Unix

Linux admet dos senyals confiables POSIX (d'ara endavant "senyals estàndard") i senyals POSIX en temps real.

Senyals estàndard

Linux admet els senyals estàndard que es detallen a continuació. Diversos nombres de senyal són dependents de l'arquitectura, tal com s'indica a la columna "Valor". (Quan es donen tres valors, el primer sol ser vàlid per alfa i sparc, el mig per a i386, ppc i sh i l'últim per mips.

A - denota que hi ha un senyal absent en l'arquitectura corresponent).

Les entrades de la columna "Acció" de la taula especifiquen l'acció predeterminada del senyal, de la manera següent:

Termini

L'acció predeterminada és finalitzar el procés.

Ign

L'acció predeterminada és ignorar el senyal.

Nucli central

L'acció predeterminada és finalitzar el procés i abocar el nucli.

Aturar

L'acció per defecte és aturar el procés.

Primer els senyals descrits a l'estàndard POSIX.1 original.

Senyal Valor Acció Comentari
o la mort del procés de control
SIGINT 2 Termini Interrupció del teclat
SIGQUIT 3 Nucli central Sortiu del teclat
SIGILL 4 Nucli central Instrucció il·legal
SIGABRT 6 Nucli central S'ha avortat el senyal de l' avortament (3)
SIGFPE 8 Nucli central Excepció de punt flotant
SIGKILL 9 Termini Mata el senyal
SIGSEGV 11 Nucli central Referència de memòria no vàlida
SIGPIPE 13 Termini Tubs trencats: escriviu a canonades sense lectors
SIGALRM 14 Termini Senyal de temporització de l' alarma (2)
SIGTERM 15 Termini Senyal de finalització
SIGUSR1 30,10,16 Termini Senyal definit per l'usuari 1
SIGUSR2 31,12,17 Termini Senyal definit per l'usuari 2
SIGCHLD 20,17,18 Ign El nen s'ha aturat o finalitzat
SIGCONT 19,18,25 Continueu si es deté
SIGSTOP 17,19,23 Aturar Atura el procés
SIGTSTP 18,20,24 Aturar Deixa d'escriure a tty
SIGTTIN 21,21,26 Aturar entrada tty per al procés de fons
SIGTTOU 22,22,27 Aturar sortida tty per al procés de fons

Les senyals SIGKILL i SIGSTOP no es poden atrapar, bloquejar o ignorar.

A continuació, els senyals no estan en l'estàndard POSIX.1, sinó que es descriuen a SUSv2 i SUSv3 / POSIX 1003.1-2001.

Senyal Valor Acció Comentari
SIGPOLL Termini Esdeveniment pol·lable (Sys V). Sinònim de SIGIO
SIGPROF 27,27,29 Termini El temporitzador de perfils ha caducat
SIGSYS 12, -, 12 Nucli central Mala argumentació a la rutina (SVID)
SIGTRAP 5 Nucli central Trampa / trampa de punt de ruptura
SIGURG 16,23,21 Ign Condició urgent en el sòcol (4.2 BSD)
SIGVTALRM 26,26,28 Termini Rellotge despertador virtual (4.2 BSD)
SIGXCPU 24,24,30 Nucli central S'ha superat el límit de temps de la CPU (4.2 BSD)
SIGXFSZ 25,25,31 Nucli central S'ha superat el límit de mida del fitxer (4.2 BSD)

Fins i tot incloent Linux 2.2, el comportament predeterminat per a SIGSYS , SIGXCPU , SIGXFSZ i (en arquitectures diferents de SPARC i MIPS) SIGBUS va finalitzar el procés (sense un abocador principal). (En alguns altres Unices, l'acció predeterminada per a SIGXCPU i SIGXFSZ és resoldre el procés sense un abocament principal.) Linux 2.4 s'ajusta als requisits POSIX 1003.1-2001 per a aquestes senyals, i finalitza el procés amb un abocador principal.

A continuació, hi ha diverses altres senyals.

Senyal Valor Acció Comentari
SIGEMT 7, -, 7 Termini
SIGSTKFLT -, 16, - Termini Error de pila al coprocessador (no utilitzat)
SIGIO 23,29,22 Termini E / S ara possible (4.2 BSD)
SIGCLD -, -, 18 Ign Sinònim de SIGCHLD
SIGPWR 29,30,19 Termini Falla d'alimentació (sistema V)
SIGINFO 29, -, - Sinònim de SIGPWR
SIGLOST -, -, - Termini El bloqueig de fitxers s'ha perdut
SIGWINCH 28,28,20 Ign Senyal de canvi de mida de la finestra (4.3 BSD, Sol)
SIGUNUSED -, 31, - Termini Senyal no utilitzat (serà SIGSYS)

(El senyal 29 és SIGINFO / SIGPWR en una alfa però SIGLOST en un sparc).

SIGEMT no s'especifica en POSIX 1003.1-2001, però mai no apareix a la majoria d'altres Unices, on la seva acció predeterminada sol donar per finalitzada el procés amb un abocador principal.

SIGPWR (que no està especificat en POSIX 1003.1-2001) normalment s'ignora de manera predeterminada en aquells altres Unices on apareix.

SIGIO (que no s'especifica en POSIX 1003.1-2001) s'omet de manera predeterminada en diversos Unices.

Senyals en temps real

Linux admet senyals en temps real tal com es va definir originalment a les extensions en temps real POSIX.4 (i ara s'inclou a POSIX 1003.1-2001). Linux admet 32 ​​senyals en temps real, numerades des de 32 ( SIGRTMIN ) fins a 63 ( SIGRTMAX ). (Els programes sempre han de fer referència a senyals en temps real utilitzant la notació SIGRTMIN + n, ja que el rang de nombres de senyals en temps real varia en Unices.)

A diferència dels senyals estàndard, els senyals en temps real no tenen significats predefinits: es pot utilitzar tot el conjunt de senyals en temps real per a finalitats definides per l'aplicació. (Tingueu en compte, però, que la implementació de LinuxThreads utilitza els primers tres senyals en temps real.)

L'acció predeterminada per a un senyal en temps real no controlat és cancel·lar el procés de recepció.

Els senyals en temps real es distingeixen pel següent:

  1. Es poden establir múltiples instàncies de senyals en temps real. Per contra, si es lliuren diverses instàncies d'un senyal estàndard mentre el senyal està bloquejat actualment, només es posa en cua una instància.
  2. Si el senyal s'envia usant sigqueue (2), es pot enviar un valor d'acompanyament (ja sigui un enter o un punter) amb el senyal. Si el procés de recepció estableix un controlador d'aquest senyal mitjançant el signe SA_SIGACTION a sigaction (2), pot obtenir aquestes dades a través del camp si_value de l'estructura siginfo_t aprovada com a segon argument al controlador. A més, els camps si_pid i si_uid d'aquesta estructura es poden utilitzar per obtenir el PID i l'identificador d'usuari real del procés que envia el senyal.
  3. Els senyals en temps real es lliuren en un ordre garantit. Diversos senyals en temps real del mateix tipus es lliuren en l'ordre en què van ser enviats. Si s'envien diferents senyals en temps real a un procés, es lliuren començant pel senyal amb un número més baix. (És a dir, els senyals de baix nombre tenen la màxima prioritat).

Si ambdues senyals estàndard i en temps real estan pendents d'un procés, POSIX deixa que no s'especifiqui el primer lliurament. Linux, com moltes altres implementacions, dóna prioritat als senyals estàndard en aquest cas.

Segons POSIX, una implementació hauria de permetre que almenys _POSIX_SIGQUEUE_MAX (32) senyals en temps real es pugin a la cua d'un procés. Tanmateix, en comptes de posar un límit per procés, Linux imposa un límit a tot el sistema sobre el nombre de senyals en temps real en cua per a tots els processos.

Aquest límit es pot veure (i amb privilegis) canviat a través del fitxer / proc / sys / kernel / rtsig-max . Un fitxer relacionat, / proc / sys / kernel / rtsig-max , es pot utilitzar per esbrinar quants senyals en temps real estan en cua.

CONFORMANT A

POSIX.1

Important: utilitzeu l'ordre man ( % home ) per veure com s'utilitza una comanda a l'ordinador en particular.