Wie benutzt man Wait in C

Lesezeit: 2 Minuten

jabks Benutzeravatar
jabk

Wie benutze ich wait ? Es verwirrt mich einfach ohne Ende. ich fork ein Baum von Procs mit Rekursion und jetzt müssen die Kinder pausieren (warten/schlafen), während ich pstree ausführe, damit ich den Proc-Baum drucken kann.

Sollte ich es benutzen

int status;
wait(&status);

oder eher

wait(NULL)

und wo soll ich das hinstellen? im Elternteil if(pid > 0) oder bei den Kindern if(pid==0)? Vielleicht am Ende von ifs, also speichere ich alle pids im Array und führen Sie dann a aus for über sie und verwenden Sie warten?

meine Codevorlage:

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);    
    }
}

  • sleep(/*How many seconds do you want to wait*/);. sleep(1); 1 Sekunde warten.

    Benutzer3451749

    17. Mai 2014 um 9:53 Uhr


  • Dies sind einige Links, die Ihnen helfen, besser zu verstehen, wie fork() und wait() funktionieren. Schau sie dir an und komme auf deine Frage zurück. Wenn es nicht hilft, dann bitte um Hilfe csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/wait.htmlstackoverflow.com/questions/6210638/… , csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html

    – neerajDorle

    17. Mai 2014 um 9:55 Uhr

  • Lies das wait und sleep Handbuchseiten. Ich bin sicher, Sie werden den Unterschied ziemlich schnell finden.

    – Irgendein Programmierer-Typ

    17. Mai 2014 um 9:55 Uhr


  • Ich verstehe wie fork funktioniert. Ich unterscheide auch zwischen sleep und wait. Was ich nicht weiß ist was int status ist, wann zu verwenden status oder wann NULL und wo soll ich waitdamit ich verwenden kann pstree

    – jabk

    17. Mai 2014 um 10:09 Uhr


Der Benutzer-Avatar eines Programmierer-Typen
Irgendein Programmierer

Das wait system-call versetzt den Prozess in den Ruhezustand und wartet auf das Ende eines untergeordneten Prozesses. Dann füllt es das Argument mit dem Beendigungscode des untergeordneten Prozesses (falls das Argument nicht NULL).

Wenn Sie also im übergeordneten Prozess sind

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));
    }
}

Und im untergeordneten Prozess machst du zB exit(1)dann wird der obige Code gedruckt

Child process exited with 1 status

Beachten Sie auch, dass es wichtig ist, auf alle untergeordneten Prozesse zu warten. Untergeordnete Prozesse, auf die Sie nicht warten, befinden sich in einem sogenannten Zombie-Zustand, während der übergeordnete Prozess noch läuft, und sobald der übergeordnete Prozess beendet wird, werden die untergeordneten Prozesse verwaist und zu untergeordneten Prozessen von Prozess 1 gemacht.

  • @ user2202368 Dann interessiert Sie der Status nicht, Sie warten nur darauf, dass ein untergeordneter Prozess beendet wird.

    – Irgendein Programmierer-Typ

    17. Mai 2014 um 10:24 Uhr

  • Wie wartet man auf mehr als ein Kind?

    – Cătălina Sirbu

    7. Januar 2021 um 13:32 Uhr

  • @CătălinaSîrbu Die wait wartet auf die Erste Kind.

    – Irgendein Programmierer-Typ

    7. Januar 2021 um 13:38 Uhr

1437210cookie-checkWie benutzt man Wait in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy