Skip to main content

Senyal - Comando Linux / Unix

Anonim

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.

SenyalValorAccióComentari
o la mort del procés de control
SIGINT2TerminiInterrupció del teclat
SIGQUIT3Nucli centralSortiu del teclat
SIGILL4Nucli centralInstrucció il·legal
SIGABRT6Nucli centralDesactiva el senyal de avortar (3)
SIGFPE8Nucli centralExcepció de punt flotant
SIGKILL9TerminiMata el senyal
SIGSEGV11Nucli centralReferència de memòria no vàlida
SIGPIPE13TerminiTubs trencats: escriviu a canonades sense lectors
SIGALRM14TerminiSenyal de temporitzador des de alarma (2)
SIGTERM15TerminiSenyal de finalització
SIGUSR130,10,16TerminiSenyal definit per l'usuari 1
SIGUSR231,12,17TerminiSenyal definit per l'usuari 2
SIGCHLD20,17,18IgnEl nen s'ha aturat o finalitzat
SIGCONT19,18,25 Continueu si es deté
SIGSTOP17,19,23AturarAtura el procés
SIGTSTP18,20,24AturarDeixa d'escriure a tty
SIGTTIN21,21,26Aturarentrada tty per al procés de fons
SIGTTOU22,22,27Aturarsortida tty per al procés de fons

Els senyalsSIGKILL iSIGSTOP no es pot aturar, 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.

SenyalValorAccióComentari
SIGPOLL TerminiEsdeveniment pol·lable (Sys V). Sinònim de SIGIO
SIGPROF27,27,29TerminiEl temporitzador de perfils ha caducat
SIGSYS12,-,12Nucli centralMala argumentació a la rutina (SVID)
SIGTRAP5Nucli centralTrampa / trampa de punt de ruptura
SIGURG16,23,21IgnCondició urgent en el sòcol (4.2 BSD)
SIGVTALRM26,26,28TerminiRellotge despertador virtual (4.2 BSD)
SIGXCPU24,24,30Nucli centralS'ha superat el límit de temps de la CPU (4.2 BSD)
SIGXFSZ25,25,31Nucli centralS'ha superat el límit de mida del fitxer (4.2 BSD)

Fins i tot incloent Linux 2.2, el comportament predeterminat deSIGSYS, SIGXCPU, SIGXFSZ, i (en arquitectures diferents de SPARC i MIPS)SIGBUS va haver de finalitzar el procés (sense un abocament principal). (En alguns altres Unices, l 'acció predeterminada per aSIGXCPU iSIGXFSZ és acabar el procés sense un abocador principal.) Linux 2.4 s'ajusta als requisits POSIX 1003.1-2001 d'aquests senyals, que finalitzen el procés amb un abocador principal.

A continuació, hi ha diverses altres senyals.

SenyalValorAccióComentari
SIGEMT7,-,7Termini
SIGSTKFLT-,16,-TerminiError de pila al coprocessador (no utilitzat)
SIGIO23,29,22TerminiE / S ara possible (4.2 BSD)
SIGCLD-,-,18IgnSinònim de SIGCHLD
SIGPWR29,30,19TerminiFalla d'alimentació (sistema V)
SIGINFO29,-,- Sinònim de SIGPWR
SIGLOST-,-,-TerminiEl bloqueig de fitxers s'ha perdut
SIGWINCH28,28,20IgnSenyal de canvi de mida de la finestra (4.3 BSD, Sol)
SIGUNUSED-,31,-TerminiSenyal no utilitzat (serà SIGSYS)

(El senyal 29 ésSIGINFO / SIGPWR en una alfa peròSIGLOST en una 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 ser acabar el procés amb un abocador principal.

SIGPWR (que no s'especifica 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 a partir de 32 (SIGRTMIN) a 63 (SIGRTMAX). (Els programes sempre han de referir-se 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 usantsigqueue(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 per a aquest senyal utilitzant elSA_SIGACTION marca asigaction(2), llavors pot obtenir aquestes dades a través de la si_value camp de la siginfo_t L'estructura passa com el segon argument al controlador. A més, el si_pid i si_uid Els camps 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 / proc / sys / kernel / rtsig-max dossier. 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: Utilitzar el home comandament ( % home ) per veure com s'utilitza una comanda a l'ordinador en particular.