Semnal (computer)
Un semnal , în informatică , este un impuls asincron transmis de la un proces la altul și este unul dintre instrumentele de comunicare dintre procese . De obicei, nu sunt transmise date împreună cu semnalul, spre deosebire de ceea ce se întâmplă, în general, pentru evenimentele din programarea evenimentelor .
In Unix , Unix- operare sisteme și în general cele care urmează POSIX caietul de sarcini, există o metodologie uniformă folosind semnale, cum ar fi utilizarea kill ()
apelul de signal()
sigaction()
sistem pentru a trimite semnale, sau folosind signal()
și sigaction()
pentru m definirea funcțiilor de manipulare a semnalului. În aceste sisteme, precum și din alte procese, semnalele sunt trimise direct de către nucleu pentru a notifica apariția unor condiții anormale (de exemplu, SIGSEGV, SIGBUS sau chiar SIGURG)
Specificația unică UNIX specifică următoarele semnale pentru <signal.h>
:
Nume | Sens |
---|---|
SIGABRT | Încetarea anormală (avort) a procesului. |
SIGALRM | Semnal ridicat de alarm() . |
SIGBUS | Eroare de autobuz: „Încercarea de a accesa o porțiune nedefinită a obiectului de memorie” („acces la porțiunea nedefinită a obiectului de memorie” [1] ). |
SIGCHLD | Procesul secundar a fost încheiat sau oprit (sau repornit [2] ). |
SIGCONT | Procesul poate continua, dacă a fost oprit. |
SIGFPE | Excepție într-un număr în virgulă mobilă : „operație aritmetică eronată” [1] ). |
PREZENTARE | Hangup : În general ridicat când un terminal este închis. |
SIGILIU | Educație ilegală. |
SIGINT | Întreruperea procesului. |
SIGKILL | Încetarea imediată ( uciderea ) procesului. Acest semnal nu poate fi ignorat, iar procesul de recepție nu poate efectua operațiuni de închidere „soft”. |
SIGPIPE | Dacă un proces care ar trebui să fie citit dintr-o conductă se termină în mod neașteptat, acest semnal este trimis către programul care ar trebui să scrie în conducta în cauză. |
SIGQUIT | Întreruperea procesului. |
SIGSEGV | Programul a generat o eroare de segmentare . |
SIGSTOP | Opriți temporar executarea procesului: acest semnal nu poate fi ignorat. |
SIGTERM | Încetarea programului; comanda kill trimite acest semnal dacă nu se specifică altfel. |
SIGTSTP | Opriți temporar procesul de rulare. |
SIGTTIN | Un proces care rulează în fundal încearcă să citească de pe terminal ( în ). |
SIGTTOU | Un proces care rulează în fundal încearcă să scrie pe terminal ( out ). |
SIGUSR1 | Definit de utilizator. |
SIGUSR2 | Definit de utilizator. |
SIGPOLL | O operațiune de intrare / ieșire a fost posibilă, permite interogarea [2] . |
SIGPROF | O numărătoare inversă setată pentru proces este terminată: măsoară timpul procesorului utilizat de proces și de sistem pentru a efectua acțiuni instruite de procesul însuși [2] . |
SIGSYS | Apel sistem incorect [2] . |
SIGTRAP | Executarea procesului a atins un punct de întrerupere ( capcană ), depanatorul poate informa dezvoltatorul despre acest lucru [2] . |
DOMNUL | Există date urgente disponibile pentru proces pe o priză . |
SIGVTALRM | O numărătoare inversă setată pentru proces s-a încheiat: măsoară timpul „virtual” consumat doar de proces [2] („temporizatorul virtual a expirat” [1] ). |
SIGXCPU | Timpul procesorului epuizat disponibil pentru proces [2] . |
SIGXFSZ | S- a depășit dimensiunea maximă a fișierului permisă pentru lucrare [2] . |
Condiții
Următoarele condiții pot genera un semnal:
- Când un utilizator tastează anumite combinații de taste într-un terminal, se generează un semnal. De exemplu, atunci când un proces este forțat să anuleze cu CTRL + C (SIGINT în general).
- Unele excepții hardware pot genera semnale: împărțiți la zero, acces nevalid la memorie și așa mai departe. Programatorii începători suferă adesea consecințele semnalului SIGSEGV din cauza pointerelor neinițializate sau dereferențiate atunci când indică spre NULL.
- Procesele pot trimite semnale către ei înșiși folosind apelul de sistem
kill()
, dacă permisiunile le permit. - Nucleul poate genera semnale pentru a informa procesele atunci când se întâmplă ceva anume. De exemplu, un SIGPIPE ar fi ridicat dacă un proces ar încerca să scrie pe o conductă închisă prin procesul care ar trebui să-l citească.
Semnalele pot provoca, uneori, terminarea unui apel sistem în curs.
Notă
Elemente conexe
linkuri externe
- (RO) Baris Simsek,Semnale (PDF), pe enderunix.org, 2005. Adus de 02-06-2008. - Semnalele POSIX UNIX și fiabile