multiprocessing terminate funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Hallo,

Ich beende einen Prozess der stehen geblieben ist mit terminate, ohne dass das einen Effekt hat. Ich sehe im log, dass terminate aufgerufen wurde und trotzdem sehe ich den Prozess noch im task-monitor. Der Prozess wird nach wie vor mit dem Status futex_wait_queue_me angezeigt (im Ubuntu Taskmanager).
Mir ist noch nicht ganz klar, wieso der Prozess hängt, aber terminate sollte doch entweder blocken, wenn der Prozess noch nicht beendet wurde, oder einen Fehler melden, oder? In http://stackoverflow.com/questions/1052 ... s-on-linux wird vorgeschlagen

Code: Alles auswählen

os.sytem('kill -9 {}'.format(pid)) 
aufzurufen, oder einen Signalhandler einzurichten. Ich werde es Mal mit dem Signalhandler versuchen.
So weit ich weiß, ist es problematisch Prozesse zu beenden, die wiederum Kindprozesse haben, das sollte aber bei mir nicht das Problem sein.

Thx,
Boa
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Den Signalhandler habe ich am Anfang der target Methode des Prozesses installiert. Das hat aber nichts gebracht. Also probiere ich es Mal mit kill.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Dokumentation hat geschrieben:On Unix this is done using the SIGTERM signal;[...]
`Process.terminate()` sagt dem Prozess also letztendlich nur dass er sich beenden soll, dass muss der Prozess aber nicht unbedingt machen. Einige IO Operationen in Python ignorieren SIGTERM, deswegen wird wahrscheinlich in deinem Fall nichts passieren. Wenn du den Prozess wirklich beenden willst, solltest du `Process.terminate()` aufrufen, dem Prozess einen Moment Zeit geben sich zu beenden und dann den Prozess mit ``os.kill(process.pid, signal.SIGKILL)`` beenden.
Antworten