Signal - Linux / Unix naredba

Linux podržava i POSIX pouzdane signale (u daljnjem tekstu "standardni signali") i POSIX real-time signali.

Standardni signali

Linux podržava dolje navedene standardne signale. Nekoliko signalnih brojeva ovisi o arhitekturi, kao što je naznačeno u stupcu "Vrijednost". (Gdje su tri vrijednosti, prva je obično valjana za alfa i sparc, srednji za i386, ppc i sh, a posljednji za mips.

A - označava da je signal prisutan na odgovarajućoj arhitekturi.)

Unosi u stupcu "Akcija" u tablici određuju zadanu akciju za signal, kako slijedi:

Termin

Zadana radnja je prekinuti postupak.

IGN

Zadana radnja je zanemariti signal.

srž

Zadana radnja je ukinuti proces i odlaganje jezgre.

Stop

Zadana radnja je zaustavljanje postupka.

Najprije signali opisani u izvornom POSIX.1 standardu.

Signal Vrijednost Akcijski Komentar
ili smrti kontrole procesa
SIGINT 2 Termin Prekinite s tipkovnice
SIGQUIT 3 srž Zatvorite tipkovnicu
SIGILL 4 srž Nezakonito uputstvo
SIGABRT 6 srž Prekini signal od prekida (3)
SIGFPE 8 srž Izuzetak s pomičnim zarezom
SIGKILL 9 Termin Ubiti signal
SIGSEGV 11 srž Nevažeća referenca za memoriju
SIGPIPE 13 Termin Slomljena cijev: napiši cijev bez čitača
SIGALRM 14 Termin Signal vremena s alarmom (2)
SIGTERM 15 Termin Signal završetka
SIGUSR1 30,10,16 Termin Korisnički definirani signal 1
SIGUSR2 31,12,17 Termin Korisnički definiran signal 2
SIGCHLD 20,17,18 IGN Dijete je prestalo ili prestalo
SIGCONT 19,18,25 Nastavi ako se zaustavi
SIGSTOP 17,19,23 Stop Zaustavi postupak
SIGTSTP 18,20,24 Stop Prestani tipkati na tty
SIGTTIN 21,21,26 Stop tty ulaz za pozadinski proces
SIGTTOU 22,22,27 Stop tty izlaz za pozadinski proces

Signali SIGKILL i SIGSTOP ne mogu se uhvatiti, blokirati ili zanemariti.

Dalje signali nisu u POSIX.1 standardu, ali opisani su u SUSv2 i SUSv3 / POSIX 1003.1-2001.

Signal Vrijednost Akcijski Komentar
SIGPOLL Termin Pollable događaj (Sys V). Sinonim SIGIO
SIGPROF 27,27,29 Termin Istekao je profiliranje vremena
SIGSYS 12 - 12 srž Loši argument za rutinu (SVID)
SIGTRAP 5 srž Trap / prekidna točka
SIGURG 16,23,21 IGN Hitno stanje na utičnici (4.2 BSD)
SIGVTALRM 26,26,28 Termin Virtualni alarmni sat (4.2 BSD)
SIGXCPU 24,24,30 srž Vremensko ograničenje CPU-a premašeno (4.2 BSD)
SIGXFSZ 25,25,31 srž Ograničenje veličine datoteke premašeno (4.2 BSD)

Do i uključujući Linux 2.2, zadano ponašanje za SIGSYS , SIGXCPU , SIGXFSZ i (na arhitekturama osim SPARC i MIPS) SIGBUS je trebalo prekinuti postupak (bez sržnog odlaganja). (U nekim drugim jedinicama zadana je radnja za SIGXCPU i SIGXFSZ da prekinemo proces bez pohranjivanja jezgre.) Linux 2.4 usklađen je sa zahtjevima POSIX 1003.1-2001 za te signale, što završava proces s osnovnim izvatkom.

Sljedeći razni drugi signali.

Signal Vrijednost Akcijski Komentar
SIGEMT 7 -, 7 Termin
SIGSTKFLT - 16 - Termin Pogreška stacka na koprocesoru (neiskorišteno)
SIGIO 23,29,22 Termin I / O sada je moguće (4.2 BSD)
SIGCLD - - 18 IGN Sinonim za SIGCHLD
SIGPWR 29,30,19 Termin Prekid napajanja (sustav V)
SIGINFO 29, -, - Sinonim za SIGPWR
SIGLOST -, -, - Termin Zaključana je datoteka izgubljena
SIGWINCH 28,28,20 IGN Signal veličine prozora (4.3 BSD, Sunce)
SIGUNUSED - 31 - Termin Neiskorišteni signal (bit će SIGSYS)

(Signal 29 je SIGINFO / SIGPWR na alfa, ali SIGLOST na sparcu .)

SIGEMT nije naveden u POSIX 1003.1-2001, no ipak se pojavljuje na većini ostalih Unices, gdje je zadana radnja obično završava proces s jezgrom izvatkom.

SIGPWR (koji nije naveden u POSIX 1003.1-2001) obično se prema zadanim postavkama zanemaruje na onim drugim Unices mjestima gdje se pojavljuje.

SIGIO (koji nije naveden u POSIX 1003.1-2001) zanemaruje se prema zadanim postavkama na nekoliko drugih Unices.

Signali u realnom vremenu

Linux podržava signale u stvarnom vremenu kao što je izvorno definirano u POSIX.4 ekstenzijama u stvarnom vremenu (a sada je uključeno u POSIX 1003.1-2001). Linux podržava 32 signala u stvarnom vremenu, brojevima od 32 ( SIGRTMIN ) do 63 ( SIGRTMAX ). (Programi se uvijek trebaju odnositi na signale u stvarnom vremenu pomoću oznake SIGRTMIN + n, jer se raspon brojeva signala u stvarnom vremenu razlikuje od Unicesa.)

Za razliku od standardnih signala, signali u stvarnom vremenu nemaju unaprijed definiranih značenja: cijeli niz signala u stvarnom vremenu može se koristiti za svrhe definirane u aplikaciji. (Napominjemo, međutim, da implementacija LinuxThreadsa koristi prva tri signala u realnom vremenu.)

Zadana radnja za neuključeni signal u stvarnom vremenu jest prekinuti postupak primanja.

Signali u stvarnom vremenu razlikuju se od sljedećeg:

  1. Mnogo primjera signala u realnom vremenu može biti u redu čekanja. Nasuprot tome, ako se isporučuju višestruke instance standardnog signala dok je taj signal trenutno blokiran, tada je samo jedan primjer u redu čekanja.
  2. Ako se signal šalje pomoću signoja (2), prateća vrijednost (bilo cijeli broj ili pokazivač) može se poslati uz signal. Ako postupak prijama uspostavlja rukovatelj za ovaj signal pomoću SA_SIGACTION zastavice na sigaction (2), tada ona može dobiti te podatke preko polja si_value strukture siginfo_t kao drugog argumenta rukovatelju. Nadalje, si_pid i si_uid polja ove strukture mogu se koristiti za dobivanje PID-a i stvarnog korisničkog ID-a procesa koji šalje signal.
  3. Signali u stvarnom vremenu isporučuju se u zajamčenom redoslijedu. Više signala istog tipa u stvarnom vremenu isporučuju se redoslijedom kojim su poslani. Ako se različitim signalima u stvarnom vremenu šalju procesu, one se isporučuju počevši od signala s najnižim brojem. (Naime, signali s malim brojem imaju najveći prioritet.)

Ako su oba standardna i signala u stvarnom vremenu u tijeku za proces, POSIX ostavlja neodređen koji se isporučuje prvi. Linux, kao i mnoge druge implementacije, daje prioritet standardnim signalima u ovom slučaju.

Prema POSIX-u, implementacija bi trebala omogućiti najmanje _POSIX_SIGQUEUE_MAX (32) signala u stvarnom vremenu da budu na čekanju na proces. Međutim, umjesto postavljanja ograničenja po procesu, Linux nameće ograničenje na razini cijelog sustava na broj zakašnjelih signala u stvarnom vremenu za sve procese.

To se ograničenje može promatrati (i uz privilegiju) mijenjati preko / proc / sys / kernel / rtsig-max datoteke. Slična datoteka, / proc / sys / kernel / rtsig-max , može se koristiti za otkrivanje koliko je signala u realnom vremenu trenutačno u redu čekanja.

SUDJELUJUĆI U

POSIX.1

Važno: Upotrijebite naredbu čovjek ( % man ) kako biste vidjeli kako se naredba koristi na vašem računalu.