Hoe werkt wachten (NULL) precies in zijn werk?

Als ik gebruik wait(null), en ik weet dat (zeker) dat het kind zal eindigen (exit) voordat we bereiken wait(null)in de ouderproces, doet wait(null)blokkeren ouderproces ??
Ik bedoel, het wait()zal geen signaal recht om niet te krijgen?

int main() {
   int pipe_descs[2] ;
   int i, n, p ;
   srand(time(NULL(  ;
   pipe(pipe_descs) ;
   for (i = 0; i < 2; i++) {
           pid_t status = fork() ;
           if (status == 0) {
                 n = rand() % 100;
                 p = (int) getpid() ;
                 write(pipe_descs[1],  &n,  sizeof(int)) ;
                 write(pipe_descs[1],  &p,  sizeof(int)) ;
                 exit(0) ;
            }
           else {
               read(pipe_descs[0],  &n,  sizeof(int)) ;
               read(pipe_descs[0],  &p,  sizeof(int)) ;
               printf(" %d %d\n", n, p) ;
               wait(NULL)  ;   //  (1)
         }
   }
    return 0 ;
}

Antwoord 1, Autoriteit 100%

wait(null)zal ouderproces blokkeren tot een van de onderliggende voltooid. Als kind eindigt voordat bovenliggende proces bereikt wait(null)dan is het kind proces om beurten een zombie processtotdat haar moedermaatschappij wacht op hem en zijn vrijgelaten uit het geheugen.

Als ouder-proces wacht niet op haar kind en ouder als eerste finisht, dan is het kind proces wordt wees en wordt toegekend aan initals zijn kind. En init zal wachten en het proces vermelding in het proces tabel los te maken.

Met andere woorden: het bovenliggende proces wordt geblokkeerd totdat het onderliggende proces een afsluitstatus terugstuurt naar het besturingssysteem, dat vervolgens terugkeert naar het bovenliggende proces. Als het kind klaar is voordat de ouder wacht bereikt (NULL), dan zal het de exit-status lezen, de procesinvoer in de procestabel vrijgeven en doorgaan met de uitvoering totdat het ook klaar is.

Other episodes