C Programmēšana

POSIX signāli ar C programmēšanu

POSIX signāli ar C programmēšanu
Mēs varam definēt signālu kā darbību, kas tiek aktivizēta, lai brīdinātu operāciju vai pavedienu ikreiz, kad pienāk ierašanās laiks noteiktā nozīmīgā situācijā. Ikreiz, kad procedūra vai pavediens atzīst signālu, procedūra vai pavediens pārtrauks visu, ko tas dara, un nekavējoties rīkosies. Starpprocesu koordinācijā signāls var būt efektīvs. Šajā ceļvedī jūs pētīsit signālu apstrādātājus Linux, izmantojot C valodu.

Standarta vai parastie signāli:

Galvenes faila signāls.h 'signāli ir norādīti kā makro konstante. Signāla nosaukums sākās ar “SIG”, un pirms tam ir īss signāla pārskats. Līdz ar to jebkuram signālam ir atšķirīga skaitliskā vērtība. Programmas kodam jāizmanto signāla nosaukums, nevis vairāki signāli. Iemesls tam ir tas, ka signālu skaits var atšķirties atkarībā no sistēmas, bet vārdu interpretācija ir standarta. Zemāk ir daži regulāri signāli ar definētu to funkcionalitāti.

SIGHUP:

Šis signāls apturēs apstrādi. SIGHUP signāls tiek atdalīts, lai norādītu uz lietotāja termināla atdalīšanos, iespējams, tāpēc, ka attālā komunikācija ir bojāta vai noliekama.

SIGINT:

Tas izjauks procesu. SIGINT signāls tiek saņemts ikreiz, kad lietotājs ievada INTR taustiņu (parasti Ctrl + C).

ĪSUMS:

Tas aptur vai izbeigs apstrādi. SIGQUIT signāls tiek saņemts ikreiz, kad lietotājs ievada taustiņu QUIT (parasti Ctrl + \).

SIGILL:

Tas darbojas, kad ir izdarīta nelikumīga komanda. Signāls SIGILL tiek izveidots ikreiz, kad tiek mēģināts izpildīt nevēlamu vai priviliģētu komandu. Ikreiz, kad kaudze pārplūst un iekārtai rodas problēmas ar signāla kontroliera darbību, var tikt izveidota arī SIGILL.

SIGTRAP:

To sauc, kad tiek izpildīta kāda izsekošanas slazdošanas instrukcija. SIGTRAP signālu izveido komanda ar pārtraukuma punktu un citu komandu trap. Atkļūdotājs izmanto šādu signālu.

SIGABRT:

To sauc par Abort signālu. Signāls SIGABRT tiek izveidots, izsaucot abort () metodi. Šāds signāls tiek izmantots, lai norādītu uz neprecizitāti, ko novēro kods, kuru iepriekš pieminēja un reģistrēja abort () metodes izsaukums.

SIGFPE:

Izņēmums peldošajiem punktiem; SIGFPE signāls tiek radīts, kad notiek katastrofāla matemātiska kļūda.

SIGUSR1 un SIGUSR2:

Signālus SIGUSR1 un SIGUSR2 varētu izmantot tā, kā jums patīk. Vieglai starpprocesu mijiedarbībai ir izdevīgi izveidot signālu apstrādātāju šādiem signāliem lietojumprogrammā, kas saņem signālu.

Signālu noklusējuma izturēšanās:

Katram signālam ir standarta uzvedība vai darbība, un noklusējuma uzvedību ir iespējams pielāgot, izmantojot apdarinātāja funkciju. Automātisko signālu SIGKILL un SIGABRT darbību nevarēja mainīt vai atstāt novārtā.

Jēdziens: Tas pārtrauks darbību.

Kodols: Tiks ģenerēts pamatdokuments, un darbība tiks pārtraukta.

Ign: Process ignorētu signālu.

Pietura: Tas apturēs darbību.

Turpinājums: Operācija tiks apturēta, ja tā netiks pārtraukta.

Signālu apstrāde:

Procesam ir priekšroka uzvedībai signālam, kad tas tiek apstiprināts. Process var rīkoties šādi:

Signāls tiek automātiski noraidīts, ja tiek ignorēta noteiktā signāla darbība.

Izmantojot tādas metodes kā signāls vai signāls, kods var reģistrēt apstrādātāja funkciju. To sauc par signāla uztveršanu no apdarinātāja.

Ja signāls netiek ārstēts vai tiek atstāts novārtā, var notikt standarta darbība.

Signālu apstrādes funkciju varat definēt kā:

$ Int signāls () int signum, anulēts (* funk) (int))

Kad apstrāde iegūst signāla signālu, signāla () metode var izsaukt “func” metodi. Signal () atgriež rādītāju uz “func” metodi, ja tā ir plaukstoša vai izņēmums tiek atgriezts pie errno un -1.

Funkcijai “func” var būt trīs vērtības:

SIG_DFL: Šis ir rādītājs galvenei definētajai standarta SIG DFL () metodei.h dokuments, ko izmanto signāla standarta uzvedības iegūšanai.

SIG_IGN: Šī ir atsauce uz SIG IGN () ignorēšanas metodi, kas norādīta galvenē.h dokuments.

Lietotāja definēts apstrādātāja metodes rādītājs: Lietotāja definēts apstrādātāja metodes tips void (*) (int) nozīmē, ka atgriešanās kategorija ir tukša un ka atsevišķais arguments ir int.

Izveidot jaunu faila signālu.c 'un ierakstiet zem tā signāla apstrādātāja kodu.

Saistiet signālu.c fails ar gcc.

Raidot signālu.c failu, mums ir bezgalīga cilpa, kas tiek veikta galvenajā metodē. Nospiežot CTRL + C, tā sāka apstrādātāja metodi, un galvenās metodes izpilde apstājās. Galvenās metodes apstrāde turpinājās pēc apstrādātāja metodes pabeigšanas. Nospiežot taustiņu Ctrl + \, darbība tiek pārtraukta.

Signālu ignorēt:

Lai nepamanītu signālu, izveidojiet faila signālu.c 'un ierakstiet zem tā kodu.

Piesaistiet ignorēšanu.c fails ar gcc.

Palaist signālu.c fails. Pieskarieties CTRL + C, tiek izveidots signāls SIGNIT; tomēr uzvedība netiek pamanīta, jo apstrādātāja metode ir uzskaitīta uz SIG_IGN () metodi.

Pārreģistrēt signālu apstrādātāju:

Lai pārreģistrētu signālu apstrādātāju, izveidojiet jaunu failu 'rereg.c 'un tajā ierakstiet šādu kodu:

Saistīt rereg.c fails ar gcc.

Palaist rereg.c fails. Pirmo reizi nospiežot CTRL + C apstrādātāja metodi, signāla apstrādātājs pārreģistrējās SIG_DFL. Vēlreiz nospiežot CTRL + C, izpilde tika pārtraukta.

Sūtīt signālus, izmantojot Raise ():

Izveidot failu nosūtīt.c 'un pievienojiet zemāk esošo kodu. Lai nosūtītu signālus uz izsaukšanas metodi, tiek izmantota paaugstināšanas () metode.

Saistiet nosūtīšanu.c fails ar gcc.

Procesā tiek izmantota paaugstināšanas () metode, lai SIGUSR1 signālu pārraidītu pats.

Sūtīt signālus, izmantojot slepkavību ():

Pievienojiet zemāk esošo kodu 'paaugstināt.c '. Izmantojiet nogalināšanas metodi (), lai nosūtītu signālus procesa grupai.

Saistiet paaugstinājumu.c fails ar gcc.

Izmantojot metodi kill (), process novirza SIGUSR1 signālu uz iepriekš minēto.

Vecāku un bērnu mijiedarbība:

Lai skatītos vecāku un bērnu mijiedarbību, ierakstiet zemāk esošo kodu failā.

Saistīt kom.c fails ar gcc.

Ar dakšu () / metodi tiek ģenerēts bērns, bērna procesam tiek atgriezta nulle un vecākiem - bērna ID.

Secinājums:

Šajā ceļvedī mēs esam redzējuši, kā izveidot, apstrādāt, nosūtīt, ignorēt, pārreģistrēt un izmantot signālu starpprocesu mijiedarbībai Linux.

Populārākās Oculus App Lab spēles
Ja esat Oculus austiņu īpašnieks, jums ir jāsazinās par sānu ielādi. Sānu ielāde ir process, kurā austiņās tiek instalēts saturs, kas nav veikals. Sid...
10 labākās spēles, kuras spēlēt Ubuntu
Windows platforma ir bijusi viena no dominējošajām spēļu platformām, jo ​​mūsdienās tiek attīstīts milzīgs spēļu skaits, lai atbalstītu Windows. Vai k...
5 labākās arkādes spēles Linux
Mūsdienās datori ir nopietnas mašīnas, kuras izmanto spēlēšanai. Ja jūs nevarat iegūt jauno augsto rezultātu, jūs zināt, ko es domāju. Šajā ierakstā j...