Sistēmas zvani

Dakšu sistēmas izsaukums Linux

Dakšu sistēmas izsaukums Linux

Dakšu sistēmas izsaukums

Dakšu sistēmas izsaukums tiek izmantots jaunu procesu izveidošanai. Jaunizveidotais process ir bērna process. Process, kas izsauc dakšiņu un rada jaunu procesu, ir vecāku process. Bērna un vecāku procesi tiek veikti vienlaicīgi.

Bet bērna un vecāku procesi atrodas dažādās atmiņas vietās. Šīm atmiņas vietām ir vienāds saturs, un jebkura darbība, ko veic viens process, neietekmēs otru procesu.

Kad tiek radīti bērna procesi; tagad abiem procesiem būs viens un tas pats programmu skaitītājs (PC), tāpēc abi šie procesi norādīs uz to pašu nākamo instrukciju. Vecāku procesa atvērtie faili būs vienādi arī bērna procesam.

Bērna process ir tieši tāds pats kā tā vecāks, taču procesu ID ir atšķirīgi:

  1. Bērna procesa procesa ID ir unikāls procesa ID, kas atšķiras no visu citu esošo procesu ID.
  2. Vecāku procesa ID būs tāds pats kā bērna vecāka procesa ID.

Bērna procesa īpašības

Tālāk ir minētas dažas īpašības, kas piemīt bērna procesam

  1. Procesora skaitītāji un resursu izmantošana tiek inicializēta, lai atiestatītu uz nulli.
  2. Kad vecāku process tiek pārtraukts, pakārtotie procesi nesaņem signālu, jo prctl () atribūts PR_SET_PDEATHSIG tiek atiestatīts.
  3. Vītne, ko izmanto, lai izsauktu dakšiņu (), izveido bērna procesu. Tātad bērna procesa adrese būs tāda pati kā vecāku adrese.
  4. Vecāku procesa faila deskriptoru pārmanto bērna process. Piemēram, faila nobīde vai karodziņu statuss un I / O atribūti tiks koplietoti starp bērnu un vecāku procesu failu aprakstiem. Tātad vecāku klases faila deskriptors atsauksies uz to pašu bērnu klases faila deskriptoru.
  5. Vecāku procesa atvērtās ziņojumu rindas aprakstus manto bērna process. Piemēram, ja faila aprakstā ir ziņojums vecāku procesā, tas pats ziņojums būs arī attiecīgā pakārtotā procesa faila aprakstā. Tātad mēs varam teikt, ka šo failu deskriptoru karodziņu vērtības ir vienādas.
  6. Līdzīgi atvērtās direktoriju straumes tiks pārmantotas pakārtotajos procesos.
  7. Bērna klases noklusējuma atslābināšanās vērtība ir tāda pati kā vecāku klases pašreizējā atslābināšanās vērtība.

Īpašības, kuras bērna process nav mantojis

Tālāk ir uzskaitītas dažas īpašības, kuras nav pārmantojis bērna process

  1. Atmiņas slēdzenes
  2. Gaidāmais bērnu klases signāls ir tukšs.
  3. Apstrādāt saistītās ierakstu bloķēšanas (fcntl ())
  4. Asinhronās I / O darbības un I / O saturs.
  5. Paziņojumi par direktoriju izmaiņām.
  6. Taimeri, piemēram, trauksme (), setitimer (), bērnu klasē netiek mantoti.

dakša () C

Fork () nav argumentu, un dakšas () atgriešanās veids ir vesels skaitlis. Lietojot fork (), jums jāiekļauj šādi galvenes faili:

# iekļaut
# iekļaut
# iekļaut

Strādājot ar dakšiņu (), var izmantot tipam pid_t procesu ID kā pid_t ir definēts .

Galvenes fails ir dakša () definīcija, tāpēc jums tā jāiekļauj programmā, lai izmantotu dakšu ().

Atgriešanas veids ir definēts un fork () zvans ir definēts . Tāpēc, lai izmantotu fork () sistēmas izsaukumu, programmā jāiekļauj abi.

Dakšas sintakse ()

Fork () sistēmas izsaukuma sintakse Linux, Ubuntu ir šāda:

pid_t dakša (spēkā neesošs);

Sintaksē atgriešanās tips ir pid_t. Kad bērna process ir veiksmīgi izveidots, bērna procesa PID tiek atgriezts vecāku procesā un 0 tiks atgriezts pašā bērna procesā.

Ja ir kāda kļūda, vecāku procesam tiek atgriezta -1 un bērna process netiek izveidots.

Fork () netiek pārsūtīti argumenti. 

1. piemērs: Zvanīšanas dakša ()

Apsveriet šādu piemēru, kurā esam izmantojuši sistēmas fork () izsaukumu, lai izveidotu jaunu bērnu procesu:

KODS:

# iekļaut
# iekļaut
# iekļaut
int main ()

dakša ();
printf ("Izmantojot sistēmas dakšas () izsaukumu \ n");
atgriešanās 0;

REZULTĀTS:

Izmantojot fork () sistēmas izsaukumu
Izmantojot fork () sistēmas izsaukumu

Šajā programmā mēs izmantojām dakšu (), tas radīs jaunu bērnu procesu. Kad tiek izveidots bērna process, gan vecāku process, gan bērna process norādīs uz nākamo instrukciju (to pašu programmas skaitītāju). Tādā veidā atlikušās instrukcijas vai C priekšraksti tiks izpildīti ar kopējo procesa reižu skaitu, tas ir, 2n reizes, kur n ir dakšu () sistēmas izsaukumu skaits.

Tātad, kad dakšas () zvans tiek izmantots vienu reizi, kā norādīts iepriekš (21 = 2) mūsu produkcija būs 2 reizes.

Šeit, izmantojot sistēmas fork () izsaukumu, iekšējā struktūra izskatīsies šādi:

Apsveriet šādu gadījumu, kad dakša () tiek izmantota 4 reizes:

KODS:

# iekļaut
# iekļaut
# iekļaut
int main ()

dakša ();
dakša ();
dakša ();
dakša ();
printf ("Izmantojot sistēmas dakšas () izsaukumu");
atgriešanās 0;

Izeja:

Dakšas () sistēmas zvana izmantošana Dakšas () sistēmas zvana lietošana Dakšas () sistēmas izsaukuma izmantošana Dakšas () sistēmas zvana izmantošana Dakšas () sistēmas zvana izmantošana Dakšas () sistēmas izsaukuma izmantošana Dakšas () sistēmas zvana izmantošana Dakšas () sistēmas zvana izmantošana Dakšas () dakšas izmantošana () sistēmas izsaukums Dakšas () izmantošana sistēmas zvana izmantošana dakšas () sistēmas izsaukuma izmantošana dakša () sistēmas izsaukuma izmantošana dakšas () sistēmas zvana izmantošana dakšas () sistēmas zvana izmantošana dakšas () dakšas () sistēmas izsaukuma izmantošana dakšas () sistēmas izsaukuma izmantošana 

Tagad kopējais izveidoto procesu skaits ir 24 = 16, un mūsu izdruka tiek izpildīta 16 reizes.

2. piemērs: pārbaude, vai dakša () bija veiksmīga

Šajā piemērā mēs izmantojām lēmumu pieņemšanas konstrukciju, lai pārbaudītu vērtību (int), ko atgrieza dakša (). Tiek parādīti atbilstošie ziņojumi:

KODS:

# iekļaut
# iekļaut
# iekļaut
int main ()

pid_t p;
p = dakša ();
ja (p == - 1)

printf ("Zvanot dakšiņu (), radās kļūda");

ja (p == 0)

printf ("Mēs esam bērna procesā");

cits

printf ("Mēs esam vecāku procesā");

atgriešanās 0;

REZULTĀTS:

Mēs esam vecāku procesā
Mēs esam bērna procesā

Iepriekš minētajā piemērā mēs izmantojām veidu pid_t, kas saglabās dakšas () atgriešanās vērtību. dakša () tiek izsaukta tiešsaistē:

p = dakša ();

Tātad veselā skaitļa vērtība, kuru atgrieza dakša (), tiek saglabāta p un pēc tam p tiek salīdzināta, lai pārbaudītu, vai mūsu dakšas () zvans bija veiksmīgs.

Kad tiek izmantots zvans fork () un bērns ir veiksmīgi izveidots, bērna procesa ID tiks atgriezts vecāku procesā un 0 tiks atgriezts bērna procesā.Bērna procesa ID vecāku procesā nebūs tāds pats kā bērna procesa ID pašā bērna procesā. Bērna procesā bērna procesa ID būs 0.

Ar šo apmācību jūs varat redzēt, kā sākt darbu ar dakšu sistēmas izsaukumu Linux.

Pievienojiet peles žestus operētājsistēmai Windows 10, izmantojot šos bezmaksas rīkus
Pēdējos gados datori un operētājsistēmas ir ievērojami attīstījušās. Bija laiks, kad lietotājiem bija jāizmanto komandas, lai pārvietotos pa failu pār...
Kontrolējiet un pārvaldiet peles kustību starp vairākiem monitoriem sistēmā Windows 10
Dual Display Mouse Manager ļauj kontrolēt un konfigurēt peles kustību starp vairākiem monitoriem, palēninot tās kustību robežas tuvumā. Windows 10/8 ļ...
WinMouse ļauj jums pielāgot un uzlabot peles rādītāja kustību Windows datorā
Ja vēlaties uzlabot peles rādītāja noklusējuma funkcijas, izmantojiet bezmaksas programmatūru WinMouse. Tas pievieno vairāk funkciju, kas palīdzēs jum...