URL: https://linuxfr.org/users/gouttegd/journaux/wait4-attendre-la-fin-d-un-ou-plusieurs-processus-quelconques Title: wait4: attendre la fin d’un ou plusieurs processus quelconques Authors: gouttegd Date: 2013年03月21日T11:15:30+01:00 License: CC By-SA Tags: wait Score: 30 Il y a quelques semaines, [srb](https://linuxfr.org/users/srb) nous présentait [waitend](https://linuxfr.org/users/srb/journaux/waitend-executer-une-commande-apres-une-autre-deja-lancee), un script Python permettant de lancer une commande à la fin de l’exécution d’un processus. Inspiré par quelques-uns des commentaires du journal sus-cité, j’ai commis _wait4_, un programme en C permettant de faire sensiblement la même chose mais en utilisant [Netlink](http://tools.ietf.org/html/rfc3549). _wait4_ s’utilise comme la commande standard _wait_ : il prend un ou plusieurs PID en paramètres et rend la main lorsque tous les processus correspondants sont terminés. La différence avec _wait_ est que les processus à attendre ne doivent pas nécessairement descendre du shell courant (ils peuvent même appartenir à un autre utilisateur). Une option `--timeout` permet de ne pas attendre plus d’un certain laps de temps. L’utilisation de Netlink apporte deux avantages : * il n’y a pas besoin de « polling », c’est le noyau qui prévient le programme que le processus cible s’est terminé ; * on peut récupérer le code de retour du processus, qui est alors renvoyé comme code de retour de _wait4_ lui-même. (Netlink apporte aussi un inconvénient : le programme doit être setuid root, parce que seul un processus privilégié peut lier une socket à une adresse de type AF_NETLINK ; mais les privilèges sont abandonnés sitôt la liaison établie.) Une méthode alternative est fournie pour les systèmes où Netlink n’est pas disponible : dans ce cas, _wait4_ utilise _kill(2)_ pour vérifier régulièrement (toutes les secondes, délai non-paramétrable pour l’instant) l’existence du ou des processus cible(s). Le code (sous GPL3 ou plus) : * dépôt Git: `git://git.incenp.org/wait4.git`, aussi [consultable en ligne](http://www.incenp.org/gitweb/?p=wait4.git;a=summary) * tarball: [wait4-0.2.1.tar.gz](http://www.incenp.org/files/softs/wait4/0.2/wait4-0.2.1.tar.gz)

AltStyle によって変換されたページ (->オリジナル) /