J'ai posé une question pour savoir comment obtenir plusieurs lignes de message à partir du module de sous-processus de Python.
Le problème est qu'au cours des tests, j'ai dû tuer le processus python qui exécute le processus gnuchess. L'utilisation de ^ c dans la ligne de commande semble tuer le processus python, mais pas le gnuprocess.
Pour tuer gnuchess, je reçois le pid avec ps aux | grep gnuchess et exécutez kill -9 PID . Existe-t-il d'autres méthodes pour tuer les processus python et gnuchess?
pkill
pour tuer un processus par son nom, de sorte que votreps aux | grep gnuchess
etkill -9 PID
peut simplement devenirpkill -9 gnuchess
Réponses:
Il existe une méthode standard, si les programmes coopèrent. Exécutez
kill -- -42
où 42 est le pid du processus parent. Cela envoie un signal à tous les processus du groupe de processus dirigé par le processus 42 (le signe moins devant le pid signifie le groupe de processus).Normalement, si vous exécutez votre script python à partir d'une invite de shell et qu'il bifurque simplement
gnuchess
, les deux processus doivent rester dans le même groupe de processus. Mais cela ne semble pas être le cas, car Ctrl+ CenvoieSIGINT
à l'ensemble du groupe de processus de premier plan.Gnuchess pourrait être dans son propre groupe de processus parce qu'il s'est fait chef de session (mais je ne sais pas pourquoi il ferait cela), ou parce que vous l'avez doublé (python forks un shell qui forch gnuchess). Un double fork est probablement évitable, mais je ne peux pas vous dire comment sans voir votre code.
Un moyen raisonnablement fiable et conforme à POSIX de trouver le pid du
gnuchess
processus estDes variantes spécifiques d'Unix peuvent avoir de meilleurs moyens d'y parvenir, telles que
pgrep
.la source
Essayer:
la source