C: Régler le problème des defunct process

Lorsque vous développez une application, il est parfois très intéressant d’utiliser des threads ou plusieurs processus pour exécuter plusieurs tâches simultanément. Nous allons ici voir un problème qui arrive lors que l’on utilise plusieurs processus, via un fork(). En effet, en C, la fonction fork permet de créer un nouveau processus, qui devient fils du processus appelant le fork.

Processus zombies (defunct)

Par défaut, lorsque le processus père s’arrête, tous les processus fils s’arrête. À l’inverse, lorsqu’un processus fils s’arrête – via un exit(0); par exemple -, sa mémoire est libérée, il devient un processus zombie (seul le bloc de contrôle reste présent) et le processus père continue de fonctionner.

Ainsi, l’on peut voir de nombreuses lignes marquées par un defunct lorsque l’on liste les processus avec un ps:

C’est parce que le processus père n’écoutes pas le signal SIGCHLD, qui est envoyé par le fils lors de son extinction. Ainsi, en écoutant le signal, le père peut libérer son bloc de contrôle. En C, c’est la fonction waitpid qui nous sera utile.

Une ligne à ajouter

Il n’y a qu’une seule ligne (ainsi qu’un #include) à ajouter à votre code C pour que les processus zombies soient “ramassés” par votre processus père. De temps en temps – l’idéal étant la boucle principale s’il y a -, exécutée cette ligne ci:

Les arguments sont les suivants:

  • WAIT_ANY est la constante permettant de dire que l’on souhaite attendre n’importe quel des processus fils de ce processus. À la place, nous aurions pu mettre le pid d’un processus particulier.
  • NULL permet de ne pas récupérer d’informations de statut du processus.
  • WNOHANG est une option permettant d’exécuter waitpid en mode non-bloquant.

N’oubliez pas d’inclure l’en-tête des fonctions et constantes ainsi:

Ainsi, il ne restera plus de processus zombie, ou defunct.

facebooktwittergoogle_plusredditpinterestlinkedinmail

MyOnlineSSH: Mise à jour

Le service MyOnlineSSH a été mis à jour. Pour rappel, lors de mon précédent article sur MyOnlineSSH, je vous présentait ce service comme un client SSH Web: vous pouvez vous connecter sur un serveur SSH et utiliser votre navigateur comme terminal, ce qui est extrêmement pratique lorsque vous êtes à un endroit où vous pouvez pas utiliser le port 22 à l’exterieur de votre réseau, et que vous ne souhaitez pas mettre en place un tunnel HTTP par exemple.

Change-log

  • Le Flash Player n’est maintenant plus requis, seules des requêtes GET et POST sont envoyées.
  • Vous pouvez créer plusieurs terminaux simultanés
  • Rapidité beaucoup plus importante.

Si vous avez une quelconque suggestion ou question, n’hésitez pas à me contacter ou à laisser un commentaire sur cet article.

facebooktwittergoogle_plusredditpinterestlinkedinmail

MyOnlineSSH: Version anglaise

La version anglaise de MyOnlineSSH est mise en ligne permettant à tous les anglophones de se connecter en SSH depuis leur navigateur Internet, éditée avec PHP-Gettext-Edit, un outils permettant la gestion extrêmement facile des fichiers de traduction d’une application Internet (dont la version 2, avec gestion de comptes utilisateurs ne devrait pas tarder).

facebooktwittergoogle_plusredditpinterestlinkedinmail