Plattformübergreifende Methode zum Abrufen von PIDs nach Prozessnamen in Python
Mehrere Prozesse mit dem gleichen Namen gibt, läuft auf dem host. Was ist der cross-Plattform-Weg, um PIDs der Prozesse nach Namen mit python oder jython?
- Ich möchte etwas wie
pidof
aber in python. (Ich habe nichtpidof
sowieso.) - Ich kann nicht analysieren
/proc
weil es möglicherweise nicht verfügbar ist (bei HP-UX). - Ich nicht wollen, zu laufen
os.popen('ps')
und analysieren Sie die Ausgabe, weil ich denke, dass es hässlich ist (Feld Reihenfolge kann unterschiedlich sein in verschiedenen OS). - Ziel-Plattformen sind Solaris, HP-UX, und vielleicht andere.
InformationsquelleAutor der Frage Alex Bolotov | 2009-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie psutil (https://github.com/giampaolo/psutil), die arbeiten auf Windows-und UNIX:
Auf meinem Rechner druckt er:
BEARBEITEN 2017-04-27 - hier ist eine erweiterte utility-Funktion, die überprüft, den Namen gegen Prozesse", name(), cmdline() und exe():
InformationsquelleAutor der Antwort Giampaolo Rodolà
Gibt es keine einzige cross-Plattform-API, die Sie haben zu prüfen, die für OS. Für posix-basierte Verwendung von /proc. Für Windows verwenden Sie folgenden code, um die Liste aller pids mit den jeweiligen Prozess-Namen
Können Sie dann leicht herausfiltern, die Prozesse, die Sie benötigen.
Für weitere Informationen über die verfügbaren Eigenschaften der Win32_Process-check-out Win32_Process-Klasse
InformationsquelleAutor der Antwort Ivan
Geben alle pids der "YourProcess.exe"
InformationsquelleAutor der Antwort baco
Ich glaube nicht, dass Sie in der Lage sein zu finden, eine rein auf python basierende, tragbare Lösung ohne die Verwendung von /proc oder Befehlszeilen-Dienstprogramme, zumindest nicht in python selbst. Parsing-os.system ist nicht hässlich - hat jemand auf den Umgang mit den verschiedenen Plattformen, sei es Sie oder jemand anderes. Implementieren Sie für die OS, die Sie interessiert sind in sollte einfach sein, ehrlich.
InformationsquelleAutor der Antwort David Cournapeau
Zuerst Windows (in all seinen Inkarnationen) ist eine nicht-standard-OS.
Linux (und die meisten proprietären unixen) sind POSIX-konforme standard-Betriebssystemen.
Den C-Bibliotheken spiegeln diese Dichotomie. Python spiegelt die C-Bibliotheken.
Es ist kein "cross-platform" Weg, dies zu tun. Sie haben am hacken etwas mit ctypes für eine bestimmte Version von Windows (XP oder Vista)
InformationsquelleAutor der Antwort S.Lott
Gibt es nicht, fürchte ich. Prozesse sind eindeutig identifiziert durch pid nicht nach Namen. Wenn Sie wirklich müssen eine pid nach dem Namen, dann haben Sie etwas verwenden möchten, die Sie vorgeschlagen haben, aber es wird nicht tragbar sein und wird wahrscheinlich nicht in allen Fällen funktionieren.
Wenn Sie nur zu finden, die pids, die für eine bestimmte Anwendung und Sie haben die Kontrolle über diese Anwendung ist, dann würde ich vorschlagen, ändern Sie diese app zum speichern der pid-in-Dateien in einem bestimmten Ort, wo Ihr Skript finden können.
InformationsquelleAutor der Antwort ubiyubix
Für jython, Java 5 verwendet wird, dann kannst du den Java-Prozess-id wie folgt:
aus java.lang.management-import *
pid = ManagementFactory.getRuntimeMXBean().getName()
InformationsquelleAutor der Antwort ccyu
Einen Hinweis auf ThorSummoner Kommentar
Ich habe es auf Debian mit Python 3, ich denke, es hat zu sein
proc.name()
stattproc.name
.InformationsquelleAutor der Antwort pchaitat