Warten Sie, bis ein bestimmter Prozess (die Erkenntnis der "pid") end
Habe ich dieses:
def get_process():
pids = []
process = None
for i in os.listdir('/proc'):
if i.isdigit():
pids.append(i)
for pid in pids:
proc = open(os.path.join('/proc', pid, 'cmdline'), 'r').readline()
if proc == "Something":
process = pid
return process
def is_running(pid):
return os.path.exists("/proc/%s" % str(pid))
Dann Mach ich das:
process = get_process()
if process == None:
#do something
else:
#Wait until the process end
while is_running(process):
pass
Ich denke, dies ist nicht der beste Weg, zu warten, bis der Prozess beendet, muss es irgendeine Funktion warten oder so, aber ich kann es nicht finden.
Haftungsausschluss: Der Prozess ist nicht ein Kind-Prozess
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht wirklich ein Python-Programmierer, aber anscheinend Python hat
os.waitpid()
. Sollten verbrauchen weniger CPU-Zeit und eine viel schnellere Reaktion als, sagen wir, versuchen, den Prozess zu beenden in Viertel-Sekunden-Takt.Nachtrag: Als Niko Punkte aus,
os.waitpid()
funktioniert möglicherweise nicht, wenn der Prozess nicht ein Kind des aktuellen Prozesses. In diesem Fall, mitos.kill(pid, 0)
kann in der Tat die beste Lösung. Beachten Sie, dass im Allgemeinen, gibt es drei wahrscheinlich, Ergebnisse von aufrufenos.kill()
auf einen Prozess:OSError
mit dererrno
- Attribut auferrno.EPERM
.OSError
mit dererrno
- Attribut auferrno.ESRCH
.Damit, zuverlässig zu überprüfen, ob ein Prozess vorhanden ist, sollten Sie etwas tun, wie
import time
, dann verwenden Sietime.sleep(#)
:Ich auch, dass genau die gleiche Funktion in einigen meiner Scripte zum Lesen durch
/proc/#/cmdline
zu überprüfen, für eine PID.Da diese Methode würde nur funktionieren, unter linux, für linux/osx-Unterstützung, die man tun könnte:
Bearbeiten - Pro tMc-Kommentar über die übermäßigen Prozesse
Verweisen: Wie um zu überprüfen, ob es existiert ein Prozess mit einer bestimmten pid in Python?
Wäre das nicht weniger Ressourcen verwenden (habe ich nicht getestet), als Präsentation auf das Dateisystem und öffnen FDs zu allen Ergebnissen?
Eine einfache und zuverlässige Möglichkeit dies zu tun, mit Python ist, indem Sie eine Liste von PIDs mit psutil, und dann prüfen, ob die PID ist in dieser Liste der Laufenden PIDs:
Um es zu verwenden, führen Sie es einfach in eine einfache while-Schleife.
Oder Sie könnten nur alle, dass in einer Funktion...
und wie