WaitPid Syscall en C

WaitPid Syscall en C

Le Les moniteurs d'appel du système WaitPid () Un enfant du processus de l'appelant pour les modifications de l'État et récupère des informations sur l'enfant dont le comportement a changé. L'enfant a été arrêté par un signal ou repris par un signal considéré comme un décalage d'état. L'attente d'un enfant licencié permet au système de libérer les ressources associées à l'enfant; Si aucune attente n'est effectuée, l'enfant licencié restera dans un «zombi" condition.

Le Fonction système WaitPid () Puse le processus actuel jusqu'à ce que l'argument PID spécifie un enfant qui a changé. Le processus d'appel est interrompu jusqu'à la fin du processus d'un enfant ou est licencié. WaitPid () arrête le processus d'appel jusqu'à ce que le système reçoive des informations sur le statut de l'enfant. WaitPid () revient rapidement si le système a déjà des informations d'état sur un enfant approprié lorsqu'elle est appelée. Si le processus de l'appelant obtient un signal avec l'action d'exécuter un gestionnaire de signaux ou de terminer le processus, waitPid () est terminé. Le Fonction WaitPid () Pause l'exécution du thread de l'appelant jusqu'à ce qu'elle reçoive des informations et des mises à jour pour l'un de ses processus enfants à la fin ou un signal qui exécutera une procédure de mise en œuvre du signal ou terminera le processus.

Exemple 1

Nous allons élaborer sur notre premier exemple dans le terminal de l'Ubuntu 20.04 Système d'exploitation. Créez un fichier avec la commande nano dans la console, comme révélé ci-dessous. Il dépend entièrement de sélectionner un nom de fichier.

$ nano attendez.c

Vous pouvez vérifier que ce fichier est apparu dans GNU Nano Editor. Mettez simplement le code affiché dans l'image jointe.

Dans cet exemple, nous avons utilisé la boucle pour incrémenter le processus. Appel système Fork () a été utilisé. Le Appel système Fork () est utilisé pour démarrer un nouveau processus, connu sous le nom de processus enfant, qui s'exécute parallèle à celui qui a fait appel fork () au processus parent. Après Appel système Fork () Crée un nouveau processus enfant, tous les processus effectueront la prochaine instruction. Il n'accepte aucune entrée et renvoie une valeur entière. Après cela, la fonction de sommeil a été utilisée.

La fonction Sleep () suspend le fonctionnement du thread d'appel jusqu'à ce que la plage de secondes en temps réel fournie par les secondes des paramètres soit passée, ou un signal est donné au thread d'appel avec l'action d'invoquer une fonction de coupure de signal ou de terminer le processus. Nous avons ajouté "1" comme argument. Femmexité vérifie l'état de résiliation des enfants renvoyé par l'attente et Méthodes WaitPid () pour voir si le processus enfant a été achevé avec succès.

Dans la fonction principale de ce programme, le Appel du système Wait () a été appelé. Une fois que vous comprenez ce code, enregistrez et sortez du fichier et revenez au terminal. Écrivez les instructions ci-dessous pour l'exécution du code. Nous avons utilisé le Compilateur GCC dans Ubuntu 20.04 système opérateur.

$ gcc attend.c
$ ./un.dehors

La sortie peut être vue dans l'image attachée.

Exemple 2

Nous allons élaborer sur notre deuxième exemple dans le terminal du Ubuntu 20.04 Système d'exploitation. Créer un fichier avec le commande nano dans la console comme présenté ci-dessous. C'est totalement à vous de sélectionner un nom de fichier.

$ nano waitpid.c

Vous pouvez vérifier que ce fichier est apparu dans GNU Nano Editor. Mettez simplement le code affiché dans l'image jointe.

Dans le code ci-dessus, encore une fois, Appel système Fork () a été utilisé. Le but du Appel système Fork () est de démarrer un nouveau processus, connu sous le nom de processus enfant, qui s'exécute parallèlement à celui qui a fait appel fork () au processus parent. Après Appel système Fork () Crée un nouveau processus enfant, tous les processus effectueront la prochaine instruction. Il n'accepte aucune entrée et renvoie une valeur entière. Exit_failure signifie la mise en œuvre inefficace d'un programme. Le Fonction Pause () Attendra les signaux.

Si un enfant s'est arrêté mais n'a pas été retracé ptrace () appel système, Sans cesse reviendra. Bien que ce paramètre ne soit pas sélectionné, le statut des enfants tracés qui s'est arrêté est fourni. Qui a contenu Retour si un enfant interrompu a été redémarré par SIGCont Broadcast. Wexitstatus (statut) Fournit le statut de sortie de l'enfant. Si Femmexité Renvoie vrai, cette expression ne doit être utilisée que. La fréquence du signal qui a incité le processus de l'enfant à la fin est renvoyé par Wtermsig (statut). Si Insignifiant a donné le «vrai», cette expression ne doit être utilisée que.

Le numéro de signal qui a incité l'enfant à s'arrêter est renvoyé par Wstopsig (statut). Si Wifstopped Renvoie vrai, cette expression ne doit être utilisée que. Wifsignaled (statut) Renvoie vrai si un signal mettait fin au processus de l'enfant. Une fois que vous comprenez ce code, enregistrez et sortez du fichier et revenez au terminal. Écrivez les instructions ci-dessous pour l'exécution du code. Nous avons utilisé le compilateur GCC dans Ubuntu 20.04 Système d'exploitation.

$ gcc waitpid.c
$ ./un.dehors

La sortie peut être vue dans l'image attachée.

Conclusion

Ce guide portait sur l'utilisation du Appel système WaitPid () en programmation C. Nous avons déclaré deux exemples. L'un d'eux est plus simple et facile. Une fois que vous avez compris, vous pouvez facilement passer au complexe. Exécutez les deux exemples sur votre système pour vous permettre de vivre facilement l'utilisation du Appel système WaitPid () en programmation C.