Egy gyermekfolyamat kilépési állapota Linuxban

Egy gyermekfolyamat kilépési állapota Linuxban

Köztudott, hogy villa() A rendszerhívás egy új folyamat létrehozására szolgál, amely a hívó folyamat gyermekévé válik. 
Kilépéskor a gyermek kilépési állapotot hagy, amelyet vissza kell adni a szülőnek. Tehát amikor a gyermek befejezi, a zombi .
Amikor a gyermek kilép vagy megáll, a szülő elküldi a SIGCHLD jel. 
A szülő használhatja a wait() vagy a waitpid() rendszerhívást a WIFEXITED és WEXITSTATUS makróval együtt, hogy megismerje leállított gyermek állapotát.
(*)wait() rendszerhívás: Felfüggeszti a hívási folyamat végrehajtását, amíg az egyik gyermeke meg nem szakad. 
A wait() rendszerhívás szintaxisa: 

 pid_t wait(int *status);  


(*)A waitpid() rendszerhívás: Felfüggeszti a hívási folyamat végrehajtását mindaddig, amíg a pid argumentum által meghatározott gyermek állapota meg nem változik. 
A waitpid() rendszerhívás szintaxisa: 

 pid_t waitpid(pid_t pid int *status int options)  


Megjegyzés: Alapértelmezés szerint a waitpid() csak a befejezett gyermekekre vár, de ez a viselkedés módosítható az opciók argumentumával, például WIFEXITED WEXITSTATUS stb.
A pid értéke lehet: 
 

  1. Kevesebb, mint -1 : Azt jelenti, hogy várjon minden olyan gyermekfolyamatra, amelynek folyamatcsoport-azonosítója megegyezik a pid abszolút értékével.
  2. Egyenlő -1: Azt jelenti, hogy várni kell minden gyermek folyamatra.
  3. Egyenlő 0: Jelentése, hogy várjon minden olyan utód folyamatra, amelynek folyamatcsoport-azonosítója megegyezik a hívó folyamat azonosítójával.
  4. 0-nál nagyobb : Azt jelenti, hogy várni kell a gyermekre, akinek a folyamatazonosítója megegyezik a pid értékével.


A WIFEXITED és a WEXITSTATUS két olyan lehetőség, amelyek segítségével megtudhatja a gyermek kilépési állapotát. 
WIFEXITED(állapot) : igazat ad vissza, ha a gyermek normálisan fejezte be.
WEXITSTATUS(állapot) : a gyermek kilépési állapotát adja vissza. Ezt a makrót csak akkor szabad használni, ha a WIFEXITED értéke igaz.
Az alábbiakban egy C megvalósítás látható, amelyben a gyermek használja excl() függvényt, de az execl() függvényben megadott elérési út nincs definiálva. 
Nézzük meg, mi a kilépési állapot értéke annak a gyermeknek, amelyet a szülő kap.

C
   // C code to find the exit status of child process   #include         #include         #include         #include         #include         // Driver code   int     main  (  void  )   {      pid_t     pid     =     fork  ();          if     (     pid     ==     0     )      {      /* The pathname of the file passed to execl()    is not defined */      execl  (  '/bin/sh'       'bin/sh'       '-c'       './nopath'       NULL  );      }      int     status  ;          waitpid  (  pid       &  status       0  );      if     (     WIFEXITED  (  status  )     )      {      int     exit_status     =     WEXITSTATUS  (  status  );         printf  (  'Exit status of the child was %d  n  '           exit_status  );      }      return     0  ;   }   

Kimenet: 
 

Egy gyermekfolyamat kilépési állapota Linuxban
    

Megjegyzés: Előfordulhat, hogy a fenti kód nem működik online fordítóval, mivel a fork() le van tiltva.
Itt a kilépési állapot 127, ami azt jelzi, hogy probléma van az elérési úttal, vagy elírás van.
Az alábbiakban néhány kilépési állapotkód található további információként: 
 

  • 1 : Különféle hibák, mint például az „osztás nullával” és egyéb meg nem engedett műveletek.

  • 2 : Hiányzó kulcsszó vagy parancs vagy engedély probléma.
  • 126 : Az engedélyprobléma vagy a parancs nem végrehajtható
  • 128 : érvénytelen argumentum a kilépéshez.


Megjegyzés: A C szabvány nem határozza meg a visszatérési kódok jelentését. A visszatérési kódok használatára vonatkozó szabályok a különböző platformokon eltérőek.
 

Kvíz létrehozása