Python Multiprocessing funktioniert nicht richtig?
Hi GF.
Ich habe da ein Problem mit einer Python-Funktion.
Hier ist die def stop():
def stop(script_name):
if script_name in running_processes:
print(script_name)
print(running_processes)
process = running_processes[script_name]
print(process)
process.terminate()
process.kill()
os.kill(process.pid, 0)
#remove_script(script_name) #unwichtig erstmal
print(f"Script {script_name} has been terminated.")
else:
print(f"Script {script_name} is not currently running.")
Das ist das Skript und wie ihr sehen könnt, versuche ich einen Prozess zu beenden.
Hier ist, was in der Konsole angezeigt wird:
└ mit Kommentaren von mir
-------- Hier wird das Skript gestartet --------
Executing script: test1.py
online -----> zeigt an, dass das Skript läuft
online
-------- Hier wird die def stop() aufgerufen --------
test1.py
{'test1.py': <Process name='Process-1' pid=30908 parent=21472 started>}
<Process name='Process-1' pid=30908 parent=21472 started>
Script test1.py has been terminated.
└> hier wurde "script1.py" anscheinend beendet
-------- hier ist die def stop() fertig --------
online -> aber das Skript läuft weiter?
online
online
...
Ich bin mit meinem Latein am Ende und weiß auch nicht mehr weiter. Ich habe den Fehler schon auf Google gesucht und habe ChatGPT gefragt, aber nichts hat funktioniert.
Danke im Voraus. :)
-- Screenshots --
2 Antworten
Einerseits kann es sein, dass dir einfach die Rechte fehlen, den Prozess abzuschießen.
Andere Möglichkeit: der Prozess fängt die Signale ab. Kill mit Signal 9 sollte aber immer funktionieren (zumindest auf unixoiden Betriebssystemen, auf Windows wird das wohl irgendwie emuliert).
Und schlussendlich könnte es auch sein, dass der Prozess tatsächlich gar nicht mehr läuft, du das aber nicht korrekt erkennst.
ich habe dein Vorschläge mal ausprobiert.
An den rechten kann es denke ich nicht liegen da bei Windows oder Linux kein Fehler kommt . wenn ich Signal 9 nehme kommt bei Windows ein zugriff verweigert Fehler und bei Linux kommt kein Fehler er bricht den Skript aber auch nicht ab. das der Prozess nur fehlerhaft angezeigt wird kann auch nicht sein. da ich es mit einem Discord bot Skript versucht habe und der weitergelaufen ist biss ich das komplette Programm geschlossen habe.
Trotzdem danke für deine Hilfe :)
Ganz grundlegend, zwischen einem SIGTERM und SIGKILL sollte etwas Zeit liegen, andernfalls kann ein Prozess nicht ordentlich auf das SIGTERM reagieren. Dazu gehört dann auch zu prüfen, ob der Prozess sich tatsächlich terminiert hat.