Når en prosess utvikler en barneprosess, er det tidvis viktig for overordnede prosessen å vente til barnet har fullført den før de fortsetter. Dette er nøyaktig hva ventetiden () systemfunksjonen oppnår.
Å vente får foreldrene til å vente på at barnet skal endre staten. Statusendringen kan skyldes at barneprosessen blir avsluttet, stoppet av et signal eller gjenopptas med et signal. Under noen omstendigheter, når en barneprosess slutter eller bytter tilstand, bør overordnede prosessen varsles om barnets endring i tilstand eller termineringsstatus. I det tilfellet bruker foreldreprosessen funksjoner som Wait () for å spørre om oppdateringen i tilstanden til barneprosessen.
Vent () Suspenderer innringerprosessen til systemet mottar informasjon om sluttbarnets status. Vent () kommer øyeblikkelig tilbake hvis systemet allerede har statusinformasjon om en ferdig barneprosess når det påkalles. Hvis den anropsprosessen mottar signalet med handling for å kjøre en signalbehandler eller avslutte prosessen, blir også vent () avsluttet.
Systemfunksjonen WaitPid () tar en pause i den nåværende prosessen til PID -argumentet spesifiserer et barn med en endret tilstand. Waitpid () venter utelukkende på avsluttende barn som standard; Imidlertid kan denne oppførselen endres. Vent () systemanrop aksepterer bare en parameter, som holder prosessens informasjon og oppdateringer. Hvis du ikke bryr deg om barneprosessens utgangsstatus og bare bryr deg om å få foreldrene til å vente på barnet, bruk null som verdien. I denne guiden vil vi utdype et eksempel for forståelsen av ventetiden () systemanropet i C -programmering.
Forutsetninger
Eksempel for å utdype ventesystemanrop i C
Åpne terminalen, og sjekk om GCC -kompilatoren er installert eller ikke. Hvis den ikke er installert, bruker du vedlagte kommando:
$ Sudo apt install GCCPå Ubuntu 20.04 System, du må først opprette en ny fil med .c forlengelse. For å oppnå dette, gå til hjemmekatalogen din og generere en ny tom fil med tittelen “Wait1”. Du kan også bruke Nano -kommandoen på terminalen din for å lage den.
$ Nano Wait1.cEtter å ha opprettet “Wait1.C ”-filen, åpnes den i en GNU -tekstredigerer på Linux -systemet ditt og lim inn koden nedenfor i den. Etter det, lagre og gå ut av programmet.
C/C ++ overskriftsfilen er kodens inngangspunkt til POSIX OS APIs mange konstante, type og funksjonerklæringer. Flere grunnleggende avledede typer er inkludert i overskriften og bør brukes der det er mulig. er en overskriftsfil som inneholder informasjonen som trengs for å inkludere input/output -rutiner i programmet vårt. De symbolske konstantene som skal brukes med Waitpid er definert i . Vi har også brukt gaffelsystemanropet i programmet.
Gaffel () systemanrop brukes til å starte en ny prosess, kjent som en barneprosess, som går parallelt med gaffelen () samtaleprosessen som er overordnet prosess. Begge prosessene vil implementere neste instruksjon etter gaffel () systemanrop når en ny barneprosess er etablert. En barneprosess deler den samme PC -programmet ", CPU -registre og åpne filer som foreldre. Den returnerer en heltallverdi uten parametere. Prosessen starter med utskrift av “Før gaffelen.”Deretter ved hjelp av gaffel () systemanrop opprettes en barneprosess.
Vent () systemanrop blir introdusert for kodens overordnede seksjon. Som et resultat blir overordnede prosessen suspendert så snart prosessoren begynner å utføre foreldrene fordi den første uttalelsen venter (null). Som et resultat kjøres for første gang barneprosessen, og alle utgangslinjene gjelder barneprosessen. NULL IN VENT () Systemanrop indikerer at vi ikke vil vite om tilstanden til barnets prosessovergang. Nå igjen, start terminalen din. I Ubuntu 20.04, bruk GCC -instruksjonen nedenfor, før av filnavnet.
$ GCC Wait1.cKjør nå koden ved hjelp av følgende pålagte kommando i terminalen.
$ ./en.uteSom det allerede er forklart, vil foreldre- og barn -ID for prosessene vises ved hjelp av et ventetursanrop.
Konklusjon
Denne artikkelen demonstrerte bruken av Wait () Systemanrop i C -programmering. Vi har implementert et av eksemplene for å vise vellykket implementering av Wait () -systemanropet. Hele koden er også beskrevet i detalj for brukerforståelse. Jeg håper du enkelt vil implementere og bruke vent () systemanrop når det er påkrevd.