Hallo BlackJack, Danke für Deine Rückinfo.
Zuerst zu dem externen ``ps``-Aufruf im Programm.
Da habe ich noch keine Alternative gefunden. Bei psutil wird ja immer eine PID vorausgesetzt, was ich in dem Moment noch nicht habe. Ich habe ja nur die aktuelle PID des jetzt gerade gestarteten Programmes, aber ob es noch weitere PIDś zu diesem Programm gibt z.B. Doppelstart, kann ich nur so herausfinden. 'ps U $USER' ist dafür der richtige Befehl. Vielleicht gibt es da auch eine Möglichkeit mit psutil, dies ist mir im Moment aber noch nicht bekannt.
Du hast auch einen Fehler angesprochen (fehlerhaft implementiert), bin mir da jetzt nicht ganz sicher, ob ich dies durch diese Änderung behoben habe.
Code: Alles auswählen
process = subprocess.Popen('ps U $USER', shell=True, stdout=subprocess.PIPE)
process.wait()
'process.wait()' setze ich ein, da ich gemerkt habe, daß ohne dies zu einem Fehler führt, der dann keinen Wert liefert und somit das Programm nicht funktioniert.
Meine Kenntnisse sind da wie Du weißt, nicht die Besten. Bitte korrigiere mich, wenn ich da falsch liege!
Das mit 'wenn der Puffer zwischen dem ``ps`` und Deinem Programm voll ist', muß ich passen. Wie groß ist so ein Puffer und von was hängt dieser ab?
Bei der Zeichenkette:
Code: Alles auswählen
x = re.sub('^[ ]', '', line)
pid = x.partition(' ')[0]
habe ich dies so geändert:
Kommt dies Deiner Anmerkung nach?
Das Zerlegen der Zeilen, habe ich so geändert:
Code: Alles auswählen
psutil.Process(int(pid_current)).terminate()
psutil.Process(int(pid_start)).terminate()
Die letzte ``else`` bei `prog_check()` ist nicht überflüssig, habe es getestet.
Bei einem Doppelstart des Programms, werde ich ja dann über einen Dialog gefragt, ob die bereits laufende PID des zuerst gestarteten Programms, beendet werden soll.
Bei Ja, werden beide PIDś (die bereits laufende PID und die neu gestartete PID) beendet.
Bei Nein, wird die neu gestartete PID beendet und die bereits laufende PID bleibt weiter aktiv.
Lasse ich nun den else_Zweig weg, so läuft auch die neu gestartete PID weiter. Das habe ich zumindest bei mir festgestellt.