Hvorfor bruke Posix Spawn?
De posix_spawn () og posix_spawnp () Funksjoner brukes begge til å lage en ny barneprosess. Barneprosessen utfører deretter en fil. Disse funksjonene ble spesifisert av POSIX for å standardisere metoden for å lage nye prosesser for maskiner som ikke har støttestøtte. Disse maskinene er vanligvis små og mangler de innebygde systemene for LMMU -støtte.
De to funksjonene kombinerer gaffel og exec, med noen ekstra trinn som vil utføre barnet. De fungerer som en delmengde av funksjonaliteter, vanligvis oppnådd med en gaffel, for alle systemanrop og innebygde systemer som mangler slik funksjonalitet.
Eksempel 1: posix_spawn ()
I dette eksemplet vil vi bruke Spawn () -funksjonen til å lage og utføre en ny barneprosess. Deretter vil vi forklare alle relevante argumenter som brukes i funksjonen.
Argumentene som brukes i eksemplet er som følger:
Argument | Beskrivelse |
---|---|
Brukes til å definere alle gyteutførende operasjoner. | |
sti | Navnet på banen som skal utføres. |
fd_count | Antall oppføringer med rekke FD_MAP. Hvis FD_Count er lik 0, blir FD_MAP ignorert. I slike tilfeller arver barneprosessen alle filbeskrivelsene, og ignorerer de som ble endret. |
fd_map | En rekke filbeskrivelser som skal arves av barneprosessen. Her, hvis verdien av FD_Count ikke er 0, er det nødvendig. Det har: · Barneprosessinngangen · Utgangen · Feilverdiene |
arve | Strukturarven viser at brukere ønsker at barnprosessen skal arve alt fra foreldrene. |
Argv | Pekeren til en bestemt argumentvektor. ArgV [0] -verdien kan ikke være null og må være filnavnet som lastes. ARGV -verdien kan ikke være lik null. |
Envp | Peker på en rekke karakterpekere. Hver av pekerne i denne matrisen peker på en miljøvariabel. Finishpunktet for matrisen er en nullpeker. |
Eksempel 2: Test.c
I det følgende eksempel opprettes en ny barneprosess for å kjøre kommandoen av /bin/sh -c. Dette er verdien som er gitt som det første argumentet. De test.c Kode er som følger:
I eksemplet ovenfor kalte vi bibliotekene, og kalte da gyte.h Overskrift. Du vil også se posix_spawn () kalt for å lage en barneprosess i eksemplet ovenfor. De gyte og Spawnp Funksjoner brukes i stedet for gaffel og Exec funksjoner. Gyte () har fleksibilitet og gir mye letthet for brukerne på mange måter. Det er litt forskjellig fra system() og exec (). Det vil komme tilbake og skape den ferske barneprosessen. I vårt eksempel er det PID. Over kan du se at ventefunksjonen Waitpid (), deretter system() benyttes. Legg merke til at gyte () og gaffel() Å ringe prosesser er de samme, og implementeringsmetoden er mer eller mindre den samme for begge funksjonene.
Vi vil nå utføre eksemplet ved hjelp av en GCC kompilator. Du kan også bruke hvilken som helst annen kompilator etter eget valg:
$ sudo gcc test.C -LRT
Neste, kjør følgende:
$ ./en.ute
Utgangen fra kommandoen ovenfor vil se ut som følger:
Barnet PID vil bli opprettet, som du kan se i ovennevnte utgang.
Bibliotek
Libc: Bruk -l C for å koble GCC kompilator. Her, legg merke til at dette biblioteket er inkludert automatisk.
Gyte ()
De gyte () Funksjonen er basert på posix 1003.1D utkast til standard brukt som posix_spawn (). C -biblioteket inkluderer Spawn*() -funksjoner. Her vil vi liste opp noen få suffikser, sammen med beskrivelsene deres:
e: brukt som en matrise for miljøvariabler.
l: Brukes som en null-terminert liste over argumentene som brukes inne i programmet.
p: brukes til å definere en relativ bane. Hvis banen ikke har en skråstrek i verdien, bruker og søker systemet for et lignende program for et lignende program for et lignende program.
v: fungerer som en vektor av argumenter i programmet.
Kartlegge filbeskrivelser
I gyte (), Vi øver på fd_count og fd_map Argumenter for å ringe ut filbeskrivelsene. Den spesifiserer hvilket barn som skal arve.
Antallet som brukes som filbeskrivelse for barneprosessen avhenger av plasseringen av den fd_map. Her vil vi vurdere eksemplet på forelderen med filbeskrivelser verdsatt 1, 3 og 5, da vil kartleggingen være noe slikt:
>> int fd_map = 1, 3, 5;
For barnet | For forelderen |
---|---|
0 | 1 |
1 | 3 |
2 | 5 |
Merk at hvis du bruker eksplisitt fd_map For å matche disse filbeskrivelsene med barnet og forelderen, må du kartlegge Spwan_fdclose funksjon for å fortsette.
Arvflagg
I Spawn må brukerne ringe ut noen av følgende flagg i tilfelle arv. Noen eksempler på gyteflagg og beskrivelsene deres er gitt nedenfor:
Flagg | Beskrivelse |
---|---|
Spawn_align_default | Dette flagget brukes til å konfigurere standardinnstillingene for oppsettet for justering. |
Spawn_align_fault | Dette flagget brukes til feiljustering av datareferansene. |
Spawn_align_nofault | Dette flagget brukes til å fikse feiljusteringen. |
Spawn_debug | Dette flagget brukes til å feilsøke kjernen. |
Spawn_exec | Spawn fungerer som exec*() ved hjelp av dette flagget. |
Spawn_explicit_cpu | Dette flagget brukes til å stille inn kjøremasken og arve masken = Run Mask -medlemmet. |
Spawn_explicit_sched | Dette flagget brukes til å sette planleggingspolitikken. |
De <gyte.h> definerer den masken Spawn_align_mask Brukes til å justere flaggene som er oppført ovenfor.
PID_T PGROUP | Barneprosessgruppen hvis du spesifiserer Spawn_setGroup i flaggets medlem. |
int runmask | Runmask of the Child -prosessen for å arve maskene som er avtalt basert på verdien av dette medlemmet. |
sigset_t sigmask | Signalmasken for barneprosessen som brukes til å spesifisere statusen til FLAG -medlemmer. |
SIGSET_T SIGDEFAULT | Settet med barneprosessene til de standardiserte signalene. |
Feil
De posix_spawn () og posix_spawnp () Funksjoner kan også mislykkes i noen tilfeller, for eksempel følgende:
Einval: Dette er tilfelle når verdien identifisert av File_Actions eller attrp er ikke riktig og tilstrekkelig.
Når den underliggende gaffelen (2), gaffelen (2) eller klonen (2) mislykkes, mislykkes gyte () Funksjoner vil returnere et feilnummer.
Enosys: Dette er tilfelle hvis funksjonen og støtten ikke er inkludert eller gitt i et system.
Konklusjon
Denne opplæringen dekket de grunnleggende funksjonalitetene gitt av Posix_spawn () og funksjonene som brukes av den for å utføre og utføre sine funksjoner. Vi dekket også flaggene og feilene som ofte brukes av gyte.