Waitpid syscall i C

Waitpid syscall i C

De WaitPid () Systemanropsmonitorer Et barn av den som ringer prosessen for statlige endringer og henter informasjon om barnet hvis oppførsel har endret seg. Barnet ble stoppet av et signal eller gjenopptatt av et signal som ble ansett som et statsskift. Å vente på et avsluttet barn gjør det mulig for systemet å frigjøre ressursene som er knyttet til barnet; Hvis ingen ventetid gjennomføres, vil det avsluttet barnet forbli i en "zombie" betingelse.

De WaitPid () Systemfunksjon Pauser den nåværende prosessen til PID -argumentet spesifiserer et barn som har endret seg. Ringingsprosessen blir pause til et barns prosess er fullført eller avsluttes. Waitpid () stopper anropsprosessen til systemet mottar informasjon om barnets status. Waitpid () kommer raskt tilbake hvis systemet allerede har statusinformasjon om et passende barn når det kalles. Hvis innringerprosessen får et signal med handlingen om å enten utføre en signalbehandler eller avslutte prosessen, Waitpid () blir avsluttet. De WaitPid () -funksjon vil pause den som ringer trådens utførelse til den mottar informasjon og oppdateringer for en av sine avsluttet barneprosesser eller et signal som enten vil kjøre en signalfangende prosedyre eller avslutte prosessen.

Eksempel 1

Vi skal utdype vårt første eksempel i terminalen til Ubuntu 20.04 operativsystem. Opprett en fil med Nano -kommandoen i konsollen, som avslørt nedenfor. Det er helt opp til deg å velge et filnavn.

$ nano vent.c

Du kan sjekke at filen har dukket opp i GNU Nano Editor. Ganske enkelt legg koden vist i det vedlagte bildet.

I dette eksemplet har vi brukt til loop for å øke prosessen. Gaffel () Systemanrop har blitt brukt. De gaffel () Systemanrop brukes til å starte en ny prosess, kjent som en barneprosess, som går parallelt med den som gjorde gaffel () ring til overordnet prosess. Etter gaffel () Systemanrop Oppretter en ny barneprosess, alle prosesser vil utføre neste instruksjon. Den godtar ingen innspill og returnerer en heltallverdi. Etter det ble søvnfunksjonen brukt.

Sleep () -funksjonen suspenderer driften av den anropstråden til området i sanntids sekund levert av parameter sekund prosess. Vi har lagt til “1” som et argument. Hustru sjekker status for barns avslutning som er returnert av ventetiden og Waitpid () Metoder For å se om barneprosessen ble fullført.

I hovedfunksjonen til dette programmet, Vent () Systemanrop har blitt kalt. Når du har forstått denne koden, lagrer du og avslutter filen og kommer tilbake til terminalen. Skriv instruksjonene nedenfor for utførelse av kode. Vi har brukt GCC -kompilator i Ubuntu 20.04 operativsystem.

$ GCC Vent.c
$ ./en.ute

Utgangen kan sees i det vedlagte bildet.

Eksempel 2

Vi kommer til å utdype vårt andre eksempel i terminalen til Ubuntu 20.04 operativsystem. Opprett en fil med Nano -kommando i konsollen som presentert nedenfor. Det er helt opp til deg å velge et filnavn.

$ nano waitpid.c

Du kan sjekke at filen har dukket opp i GNU Nano Editor. Ganske enkelt legg koden vist i det vedlagte bildet.

I ovennevnte kode, igjen, gaffel () Systemanrop har blitt brukt. Formålet med gaffel () Systemanrop er å starte en ny prosess, kjent som en barneprosess, som går parallelt med den som gjorde gaffel () ring til overordnet prosess. Etter gaffel () Systemanrop Oppretter en ny barneprosess, alle prosesser vil utføre neste instruksjon. Den godtar ingen innspill og returnerer en heltallverdi. Exit_failure betyr ineffektiv implementering av et program. De Pause () Funksjon Vil vente på signalene.

Hvis et barn har stoppet, men ikke har blitt sporet ved hjelp av Ptrace () Systemanrop, Wuntraced vil returnere. Selv om denne parameteren ikke er valgt, blir statusen til sporede barn som har stoppet levert levert. Wcontinued Retur hvis et stoppet barn er blitt startet på nytt av Sigcont -sendingen. Wexitstatus (status) gir barnets utgangsstatus. Hvis Hustru Returnerer sant, dette uttrykket skal bare brukes. Hyppigheten av signalet som fikk barneprosessen til slutt blir returnert av WTERMSIG (status). Hvis Wifsignaled ga det "sanne", dette uttrykket skulle bare brukes.

Signalnummeret som fikk barnet til å stoppe blir returnert av Wstopsig (status). Hvis Wifstoppet Returnerer sant, dette uttrykket skal bare brukes. Wifsignaled (status) Returnerer sant hvis et signal avsluttet barnets prosess. Når du har forstått denne koden, lagrer du og avslutter filen og kommer tilbake til terminalen. Skriv instruksjonene nedenfor for utførelse av kode. Vi har brukt GCC -kompilatoren i Ubuntu 20.04 operativsystem.

$ GCC Waitpid.c
$ ./en.ute

Utgangen kan sees i det vedlagte bildet.

Konklusjon

Denne guiden handlet om bruken av WaitPid () Systemanrop I C -programmering. Vi har uttalt to eksempler. En av dem er enklere og enkelt. Når du har fått forståelsen, kan du enkelt flytte til den komplekse. Utfør begge eksemplene på systemet ditt for å gjøre det enkelt for deg å oppleve bruken av WaitPid () Systemanrop I C -programmering.