Hallo!
Ich verwende derzeit subprocess.Popen, um aus meinem Programm ein anderes zu starten.
Wie kann ich mein Programm so starten, dass wenn ich das startende Programm beende, es wirklich vollständig beendet wird und nicht auf das Beenden des gestarteten Programms wartet?
Ich hoffe das war jetzt nicht so unverständlich wie sich das jetzt für mich liest.
Programmaufruf aus Python
-
- User
- Beiträge: 39
- Registriert: Montag 27. November 2006, 16:07
- Wohnort: Linz, Oberösterreich
I must not fear. Fear is the mind-killer. Fear is the little death that brings total obliteration.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
Also folgender Ablauf:
Python-Skript -> Unterprozess -> AndereUnterprozess
Du möchtest jetzt "Unterprozess" so beenden, dass er nicht auf "AndererUnterprozess" wartet? Habe ich das richtig verstanden?
Python-Skript -> Unterprozess -> AndereUnterprozess
Du möchtest jetzt "Unterprozess" so beenden, dass er nicht auf "AndererUnterprozess" wartet? Habe ich das richtig verstanden?
-
- User
- Beiträge: 39
- Registriert: Montag 27. November 2006, 16:07
- Wohnort: Linz, Oberösterreich
fast
python-skript -> programm
wenn ich mein skript beende, und das gestartete programm (über os.system oder subprocess.Popen) läuft noch, dann bleibt das skript noch unter den laufenden Prozessen.
ich würde das programm gern so starten, dass es unabhängig läuft, damit es keine probleme gibt, wenn ich während der laufzeit des gestarteten Programms nochmal das Skript starte.
klarer?
python-skript -> programm
wenn ich mein skript beende, und das gestartete programm (über os.system oder subprocess.Popen) läuft noch, dann bleibt das skript noch unter den laufenden Prozessen.
ich würde das programm gern so starten, dass es unabhängig läuft, damit es keine probleme gibt, wenn ich während der laufzeit des gestarteten Programms nochmal das Skript starte.
klarer?
I must not fear. Fear is the mind-killer. Fear is the little death that brings total obliteration.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
``subprocess.Popen`` ruft den Prozess schon asynchron auf, du darfst halt nur nicht ``wait`` oder ``communicate`` aufrufen
-
- User
- Beiträge: 39
- Registriert: Montag 27. November 2006, 16:07
- Wohnort: Linz, Oberösterreich
trotzdem ist das Skript aber noch in der Prozessliste aufgeführt. Das ist mir schon klar, dass es asynchron ist, es laufen ja beide unabhängig von einander. nur wenn ich das Skript beende, lässt es sich eben nicht vollständig schliessen und ich komme in die potentielle Situation, dass Ressourcen noch nicht voll freigegeben sind.
I must not fear. Fear is the mind-killer. Fear is the little death that brings total obliteration.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
-
- User
- Beiträge: 39
- Registriert: Montag 27. November 2006, 16:07
- Wohnort: Linz, Oberösterreich
Erkennt man unter Windows Zombieprozesse?
Unter Linux gibt's ja sowas wie den system call "disown" oder so, um childprozesse nicht mehr als kind zu führen - das würde das Problem lösen.
Aufgefallen ist es dadurch, dass in diesem fall ein port, der benutzt wird, noch nciht freigegeben wurde, da wir den nicht beim beenden programmatisch freigeben; dann müssen wir halt einen cleanup beim shutdown machen. Also nicht tragisch, aber sollte jemand eine Idee haben, wäre das natürlich toll, da ja noch Speicher belegt wird bis das child fertig ist.
Unter Linux gibt's ja sowas wie den system call "disown" oder so, um childprozesse nicht mehr als kind zu führen - das würde das Problem lösen.
Aufgefallen ist es dadurch, dass in diesem fall ein port, der benutzt wird, noch nciht freigegeben wurde, da wir den nicht beim beenden programmatisch freigeben; dann müssen wir halt einen cleanup beim shutdown machen. Also nicht tragisch, aber sollte jemand eine Idee haben, wäre das natürlich toll, da ja noch Speicher belegt wird bis das child fertig ist.
I must not fear. Fear is the mind-killer. Fear is the little death that brings total obliteration.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
Wenn's um Windows geht, bin ich der falsche Ansprechpartner
Edit:
Btw, bist du *sicher*, dass der Kindprozess der Verursacher ist, und nicht ein laufender syscall, oder ähnliches? Dafür spricht auch, dass der Port nicht freigegeben wird, was der Fall sein sollte, wenn nur die Einträge in der Prozesstabelle zurückblieben. Der Port nämlich hat mit den Verwaltungsinformationen des Prozesses nichts zu tun.
Ich habe das gerade mit einem Aufruf von wget getestet, unter Linux verschwindet *python* sofort aus der Prozessliste, während wget munter weiter lädt.
Zombie war eh verehrt, dass ist die umgekehrte Richtung: Kind bleibt in der Prozesstabelle, weil Vater den Exit-Status nicht abruft
Edit:
Btw, bist du *sicher*, dass der Kindprozess der Verursacher ist, und nicht ein laufender syscall, oder ähnliches? Dafür spricht auch, dass der Port nicht freigegeben wird, was der Fall sein sollte, wenn nur die Einträge in der Prozesstabelle zurückblieben. Der Port nämlich hat mit den Verwaltungsinformationen des Prozesses nichts zu tun.
Ich habe das gerade mit einem Aufruf von wget getestet, unter Linux verschwindet *python* sofort aus der Prozessliste, während wget munter weiter lädt.
Zombie war eh verehrt, dass ist die umgekehrte Richtung: Kind bleibt in der Prozesstabelle, weil Vater den Exit-Status nicht abruft