C Programmering

POSIX-signaler med C-programmering

POSIX-signaler med C-programmering
Vi kan definere et signal som en aktivitet, der udløses for at advare en operation eller tråd, hver gang ankomsttidspunktet for en bestemt væsentlig situation. Hver gang en procedure eller tråd anerkender et signal, stopper proceduren eller tråden uanset hvad den laver og træffer øjeblikkelig handling. I koordination mellem processer kan signalet være effektivt. I denne vejledning studerer du signalhåndterere i Linux gennem C-sproget.

Standard eller regelmæssige signaler:

Overskriftsfilens signal.h 'har signaler specificeret i det som en makrokonstant. Titlen på signalet begyndte med “SIG” og indledes med en kort signaloversigt. Derfor har ethvert signal en særskilt numerisk værdi. Programkoden skal bruge signalets navn og ikke flere signaler. Årsagen bag det er, at antallet af signaler kan variere afhængigt af systemet, men fortolkningen af ​​navne er standard. Nedenfor er nogle regelmæssige signaler med deres funktion defineret.

SIGHUP:

Dette signal hænger behandlingen op. SIGHUP-signalet kastes af for at indikere, at brugerterminal er adskilt, sandsynligvis på grund af, at en fjernkommunikation er brudt eller lægger på.

SIGINT:

Det vil forstyrre processen. SIGINT-signalet modtages, når brugeren indtaster INTR-tasten (normalt Ctrl + C).

SIGQUIT:

Det stopper eller afslutter behandlingen. SIGQUIT-signalet modtages, når brugeren indtaster QUIT-tasten (normalt Ctrl + \).

SIGILL:

Den kører, når der er foretaget en ulovlig kommando. SIGILL-signalet oprettes, hver gang der gøres en indsats for at udføre en uønsket eller privilegeret kommando. Når stakken løber over, og maskinen har problemer med at køre en signalcontroller, kan der også oprettes SIGILL.

SIGTRAP:

Det kaldes, når der udføres nogle sporfældeinstruktioner. SIGTRAP-signalet oprettes af en breakpoint-kommando og en anden trap-kommando. Fejlfindingsprogrammet bruger et sådant signal.

SIGABRT:

Det kaldes Abort signal. SIGABRT-signalet oprettes ved at kalde metoden abort (). Et sådant signal bruges til at påpege den unøjagtighed, der observeres af koden førnævnte og optages af abort () -metoden kald.

SIGFPE:

Undtagelse for flydende point; SIGFPE-signalet produceres, når der opstår en katastrofal matematisk fejl.

SIGUSR1 og SIGUSR2:

SIGUSR1- og SIGUSR2-signalerne kan bruges som du vil. Det er fordelagtigt for let interprocess-interaktion at oprette en signalbehandler for sådanne signaler i applikationen, der får signalet.

Standardadfærd for signaler:

Der er standardadfærd eller handling pr. Hvert signal, og det er muligt at justere standardadfærden ved hjælp af handlerfunktionen. Den automatiske SIGKILL- og SIGABRT-signaladfærd kunne ikke ændres eller forsømmes.

Semester: Det vil afslutte operationen.

Kerne: Et kernedumpedokument genereres, og operationen afsluttes.

Tænd: Processen vil overse et signal.

Hold op: Det stopper operationen.

Fortsat: Operationen vil blive stoppet fra at blive stoppet.

Signalhåndtering:

Processen har en præference for adfærd for et signal, når det kvitteres. Processen kan opføre sig som følger:

Signalet afvises automatisk, når den definerede signaladfærd overses.

Ved hjælp af metoder som signal eller sigaktion kan koden muligvis registrere en handlerfunktion. Det kaldes at fange et signal fra en handler.

Hvis et signal ikke behandles eller forsømmes, kan standardhandlingen forekomme.

Du kan definere signalhåndteringsfunktionen som:

$ Int signal () int signum, void (* funk) (int))

Når behandlingen opnår et signumsignal, kan signalmetoden () kalde 'func' -metoden. Signal () gendanner en markør til 'func'-metoden, hvis den er velstående, eller hvis en undtagelse returneres til errno og -1 i stedet.

'Funk' markøren er i stand til at have tre værdier:

SIG_DFL: Dette er en markør til standard SIG DFL () -metoden, defineret i headeren.h-dokument, der bruges til at få signalets standardopførsel.

SIG_IGN: Dette er en henvisning til SIG IGN () ignoreringsmetoden, der er angivet i overskriften.h-dokument.

Brugerdefineret pointer for behandlingsmetode: Den brugerdefinerede behandlingsmetodetype void (*) (int), indebærer, at returkategorien er ugyldig, og at det ensomme argument er int.

Opret et nyt filsignal.c 'og skriv nedenunder signalhåndteringskoden i den.

Forbind signalet.c-fil med gcc.

Mens du kører signalet.c-fil, har vi en endeløs løkke, der udføres i hovedmetoden. Ved at trykke på CTRL + C startede det behandlermetoden, og udførelsen af ​​hovedmetoden stoppede. Den vigtigste metodebehandling fortsatte efter gennemførelsen af ​​behandlingsmetoden. Når du trykker på Ctrl + \, afsluttes operationen.

Signal Ignorer:

For at overse signalet skal du oprette et filsignal.c 'og skriv nedenstående kode i den.

Bind ignoreren.c-fil med gcc.

Kør signalet.c-fil. Tryk på CTRL + C, der oprettes SIGNIT-signal; ikke desto mindre er opførslen ubemærket, fordi behandlermetoden er opregnet til SIG_IGN () -metoden.

Omregistrer signalhåndterer:

For at omregistrere signalbehandleren skal du oprette en ny fil 'omregistrer.c 'og indskriv nedenstående kode i den:

Tilknyt rereg.c-fil med gcc.

Kør omregistreringen.c-fil. Mens første gang du trykker på CTRL + C-behandlingsmetoden hævet, og signalbehandleren omregistreres til SIG_DFL. Mens du trykker på CTRL + C igen, blev eksekveringen afsluttet.

Send signaler ved hjælp af Raise ():

Opret en fil 'send.c 'og tilføj nedenstående kode. For at sende signaler til opkaldsmetoden bruges hævemetoden ().

Forhold sendingen.c-fil med gcc.

Processen bruger hæve () -metoden til at transmittere SIGUSR1-signalet alene.

Send signaler ved hjælp af Kill ():

Tilføj nedenstående kode i 'hæve.c '. Brug kill-metoden () til at sende signaler til procesgruppen.

Forbind forhøjningen.c-fil med gcc.

Ved at bruge kill () -metoden dirigerer processen SIGUSR1-signalet til det førnævnte.

Forældre-barn-interaktion:

For at se interaktion mellem forælder og barn, skriv nedenstående kode i en fil.

Bond komm.c-fil med gcc.

Gaffel () / metode genererer barn, gendanner nul til underordnet proces og underordnet ID til forælder.

Konklusion:

I denne vejledning har vi set hvordan man opretter, håndterer, sender, ignorerer, omregistrerer og bruger signalet til inter-proces interaktion i Linux.

Sådan vises FPS-tæller i Linux-spil
Linux-spil fik et stort skub, da Valve annoncerede Linux-support til Steam-klient og deres spil i 2012. Siden da har mange AAA- og indiespil fundet ve...
Sådan downloades og afspilles Sid Meiers Civilization VI på Linux
Introduktion til spillet Civilization 6 er et moderne udtryk for det klassiske koncept, der blev introduceret i serien af ​​Age of Empires-spil. Ideen...
Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...