web-dev-qa-db-fra.com

Exemple de waitpid () en cours d'utilisation?

Je sais que waitpid() est utilisé pour attendre la fin d'un processus, mais comment l'utiliser exactement?

Voici ce que je veux faire, créer deux enfants et attendre la fin du premier enfant, puis tuer le deuxième enfant avant de sortir.

//Create two children
pid_t child1;
pid_t child2;
child1 = fork();

//wait for child1 to finish, then kill child2
waitpid() ... child1 {
kill(child2) }
16
user3063864

Syntaxe de waitpid():

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

La valeur de pid peut être:

  • <-1: attendez tout processus enfant dont l'ID de groupe de processus est égal à la valeur absolue de pid.
  • - 1: Attendez tout processus enfant.
  • : attendez tout processus enfant dont l'ID de groupe de processus est égal à celui du processus appelant.
  • >: Attendez l'enfant dont l'ID de processus est égal à la valeur de pid.

La valeur des options est un OR de zéro ou plusieurs des constantes suivantes:

  • WNOHANG: Retourne immédiatement si aucun enfant n'est sorti.
  • WUNTRACED: Retourne également si un enfant s'est arrêté. Le statut des enfants tracés qui se sont arrêtés est fourni même si cette option n'est pas spécifiée.
  • WCONTINUED: Retourne également si un enfant arrêté a été repris par la livraison de SIGCONT.

Pour plus d'aide, utilisez man waitpid.

24
mf_starboi_8041

La syntaxe est

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

1. où pid est le processus de l'enfant qu'il doit attendre.

2.statusPtr est un pointeur vers l'emplacement où les informations d'état pour le processus d'arrêt doivent être stockées.

3. spécifie les actions facultatives pour la fonction waitpid. L'un des drapeaux d'option suivants peut être spécifié ou ils peuvent être combinés avec un opérateur inclus au niveau du bit OR:

WNOHANG WUNTRACED WCONTINUED

En cas de succès, waitpid renvoie l'ID de processus du processus terminé dont l'état a été signalé. En cas d'échec, un -1 est renvoyé.

benifits over wait

1.Waitpid peut être utilisé lorsque vous avez plus d'un enfant pour le processus et que vous souhaitez attendre qu'un enfant particulier ait terminé son exécution avant que le parent ne reprenne.

2. waitpid prend en charge le contrôle des tâches

3. il prend en charge le non blocage du processus parent

13
KARTHIK BHAT