Conceptul semnalelor


În continuare: trimiterea de semnale prin Sus: Semnale anterioară: Cuprins Semnale

Mecanismul de semnalizare este alcătuit din următoarele părți:

Există trei semnale de răspuns variante cunoscute:







  • apela propriile funcții de procesare;
  • ignorând semnalul (nu funcționează pentru SIGKILL);
  • utilizați funcția implicită de procesare prestabilită.
Pentru a răspunde la semnalele diferite, este necesar să se cunoască conceptul de procesare. Procesul trebuie să organizeze un procesor de semnal așa-numitul în caz de sosire. Pentru a face acest lucru, utilizați semnalul funcția ():

void (* semnal (int signr, void (* sighandler) (int))) (int); Acest prototip este foarte greu de înțeles. Este necesar să-l simplifice prin definirea tipului de funcții de procesare:







typedef void signalfunction (int); După aceasta, prototipul funcția devine: signalfunction * semnal (int signr,

signalfunction * sighandler); signr stabilește numărul semnalului pentru care a seta handler. Fișierul antet Următoarele semnale sunt definite (tabelul 1)..

Tabel 1. Linux semnale ale sistemului de operare.

Redimensionarea

sighandler variabilă determină funcția de procesare a semnalului. Fișierul antet definite două constante SIG_DFL și SIG_IGN. SIG_DFL înseamnă a efectua acțiunea implicită - în cele mai multe cazuri - la sfârșitul procesului. De exemplu, semnalul de determinare (SIGINT, SIG_DFL); conduce la faptul că, atunci când apăsați combinația de taste CTRL + C, în timpul reacției este declanșată în mod implicit pe un SIGINT și programul se va termina. Pe de altă parte, poate fi determinată
semnal (SIGINT, SIG_IGN);

Exemplu de tratare a semnalului este prezentată mai jos: #include

void sigfunc (int sig)

printf ( "# 92; program complet nNu (y / n).");

printf ( „Puteți termina programul cu ajutorul