Voorbeeld van waitpid() in gebruik?

Ik weet dat waitpid() wordt gebruikt om te wachten tot een proces is voltooid, maar hoe zou je het precies gebruiken?

Hier wil ik twee kinderen maken en wachten tot het eerste kind klaar is, en dan het tweede kind doden voordat ik wegga.

//Create two children
pid_t child1;
pid_t child2;
child1 = fork();
//wait for child1 to finish, then kill child2
waitpid() ... child1 {
kill(child2) }

Antwoord 1, autoriteit 100%

Syntaxis van waitpid():

pid_t waitpid(pid_t pid, int *status, int options);

De waarde van pid kan zijn:

  • < -1: wacht op een onderliggend proces waarvan de procesgroep-ID gelijk is aan de absolute waarde van pid.
  • -1: wacht op een onderliggend proces.
  • 0: wacht op een onderliggend proces waarvan de procesgroep-ID gelijk is aan die van het aanroepende proces.
  • > 0: wacht op het kind wiens proces-ID gelijk is aan de waarde van pid.

De waarde van opties is een OR van nul of meer van de volgende constanten:

  • WNOHANG: keer onmiddellijk terug als er geen kind is weggegaan.
  • WUNTRACED: keer ook terug als een kind is gestopt. Status voor getraceerde kinderen die zijn gestopt, wordt geleverd, zelfs als deze optie niet is opgegeven.
  • WCONTINUED: ook retourneren als een gestopt kind is hervat door levering van SIGCONT.

Voor meer hulp, gebruik man waitpid.


Antwoord 2, autoriteit 47%

De syntaxis is

pid_t waitpid(pid_t pid, int *statusPtr, int options);

1.waar pid het proces is van het kind dat moet wachten.

2.statusPtr is een verwijzing naar de locatie waar statusinformatie voor het beëindigingsproces moet worden opgeslagen.

3.specificeert optionele acties voor de waitpid-functie. Een van de volgende optievlaggen kan worden gespecificeerd, of ze kunnen worden gecombineerd met een bitsgewijze inclusive OR-operator:

WNOHANG
WUNTRACED
WVERVOLG

Als dit is gelukt, retourneert waitpid de proces-ID van het beëindigde proces waarvan de status is gerapporteerd. Als dit niet lukt, wordt een -1 geretourneerd.

voordeel van wachten

1.Waitpid kan worden gebruikt wanneer u meer dan één kind voor het proces heeft en u wilt wachten tot een bepaald kind de uitvoering heeft voltooid voordat de ouder wordt hervat

2.waitpid ondersteunt taakbeheer

3.it ondersteunt niet-blokkeren van het bovenliggende proces


Antwoord 3

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main (){
    int pid;
    int status;
    printf("Parent: %d\n", getpid());
    pid = fork();
    if (pid == 0){
        printf("Child %d\n", getpid());
        sleep(2);
        exit(EXIT_SUCCESS);
    }
//Comment from here to...
    //Parent waits process pid (child)
    waitpid(pid, &status, 0);
    //Option is 0 since I check it later
    if (WIFSIGNALED(status)){
        printf("Error\n");
    }
    else if (WEXITSTATUS(status)){
        printf("Exited Normally\n");
    }
//To Here and see the difference
    printf("Parent: %d\n", getpid());
    return 0;
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here

twelve + 7 =

Other episodes