hoe wacht te gebruiken in C

Hoe gebruik ik wait? Het verbijstert me gewoon mateloos. Ik forkeen boom met proc’s met recursie en nu moeten de kinderen pauzeren (wachten/slapen) terwijl ik pstree uitvoer, zodat ik de proc-boom kan afdrukken.

Moet ik

. gebruiken

int status;
wait(&status);

of liever

wait(NULL)

en waar moet ik dit plaatsen? in de ouder if(pid > 0)of in de kinderen if(pid==0)? Misschien aan het einde van ifs, dus ik sla alle pid‘s op in een array en voer dan een forerover uit en gebruik wait?

mijn codesjabloon:

void ProcRec(int index)
{
     pid_t pid;
     int noChild = getNChild(index);
     int i= 0;
     for(i = 0; i < noChild; i++)
     { 
          pid = fork();
        if (pid > 0)
        {
            /* parent process */
        }
        else if (pid == 0)
        {
            /* child process. */
            createProc(index+1);
        }
        else
        {
            /* error */
            exit(EXIT_FAILURE);
        }
    }
    if(getpid() == root)
    {
        sleep(1); 
        pid = fork();
        if(pid == 0)
          execl("/usr/bin/pstree", "pstree", getppid(), 0);    
    }
}

Antwoord 1, autoriteit 100%

Het wait-systeem -oproep zet het proces in de sluimerstand en wacht tot een kindproces wordt beëindigd. Het vult dan het argument in met de exit-code van het onderliggende proces (als het argument niet NULLis).

Dus als je in het bovenliggende proces hebt

int status;
if (wait(&status) >= 0)
{
    if (WEXITED(status))
    {
        /* Child process exited normally, through `return` or `exit` */
        printf("Child process exited with %d status\n", WEXITSTATUS(status));
    }
}

En in het onderliggende proces doe je b.v. exit(1), dan wordt de bovenstaande code afgedrukt

Kindproces afgesloten met 1 status

Houd er ook rekening mee dat het belangrijk is om te wachten op alle onderliggende processen. Onderliggende processen waar u niet op wacht, bevinden zich in een zogenaamde zombiestatus terwijl het bovenliggende proces nog loopt, en zodra het bovenliggende proces wordt afgesloten, worden de onderliggende processen wees en worden kinderen van proces 1.

Other episodes