12
votes

Comment puis-je obtenir la liste de processus à Python?

Comment obtenir une liste de processus de tous les processus d'exécution de Python, sur UNIX, contenant alors le nom de la commande / processus de processus et de processus, afin que je puisse filtrer et tuer des processus.


2 commentaires

Vous filtrez-vous pour quelque chose de spécifique dans le nom de processus? ou simplement filtrer pour les ID de processus correspondant au nom du processus?


J'ai besoin de faire correspondre une certaine session de streaming au serveur de streaming Darwin qui n'a pas d'auditeurs actuels, le processus fournissant le flux. Quelqu'un a mentionné PGREP / PKILL qui serait également utile, mais je pense que je vais utiliser krawyoti et do os.kill de Python, je suis tout simplement plus confortable d'écrire du code Python puis à l'aide de commandes Shell.


4 Réponses :


-8
votes

pourquoi python?
Vous pouvez directement utiliser killall sur le nom du processus.


4 commentaires

il a dit qu'il filtrerait puis tuerait


Bonne observation, mais pourquoi filtrer la sortie PS pour le nom de la commande, recueillez les valeurs d'identité de processus, puis tuez, lorsque le killall est-ce que vous?


Parce que j'ai besoin de faire correspondre les processus avec d'autres données.


Je tiens à retenir cette réponse car elle met en évidence la nécessité d'une solution ithin-python. La question n'a pas besoin de la partie kill ; Il peut s'agir simplement, Comment puis-je obtenir la liste de processus en python?



1
votes

sur Linux, la solution la plus facile est probablement d'utiliser la commande externe PS PS: xxx

sur d'autres systèmes, vous devrez peut-être modifier les options sur PS .

toujours, vous voudrez peut-être exécuter man sur pgrep et pkill .


3 commentaires

pgrep / pcill ressemble à une bonne solution pour ce dont j'ai besoin (au moins cette fois). J'ai toujours manqué une fonction PS intégrée à Python, donc cela fait partie de la raison pour laquelle j'ai posté cette question. Acclamations


OS.Popen est obsolète. Utilisez le module de sous-processus.


Hein, c'est intéressant. Il vaut la peine de poser une question: Stackoverflow.com/questions/1098257



10
votes

sur Linux, avec un python dûment récent qui comprend le module sous-processus : xxx

Vous devrez peut-être modifier légèrement la commande PS en fonction de vos besoins exacts.


0 commentaires

15
votes

La solution portable droite à Python utilise Psutil . Vous avez des API différentes pour interagir avec PIDS:

for p in psutil.process_iter():
    if 'nginx' in p.name() or 'nginx' in ' '.join(p.cmdline()):
        p.terminate()
        p.wait()


0 commentaires