Seite 1 von 1

multiprocessing terminate funktioniert nicht

Verfasst: Samstag 19. Oktober 2013, 15:28
von Boa
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

Re: multiprocessing terminate funktioniert nicht

Verfasst: Samstag 19. Oktober 2013, 16:20
von Boa
Den Signalhandler habe ich am Anfang der target Methode des Prozesses installiert. Das hat aber nichts gebracht. Also probiere ich es Mal mit kill.

Re: multiprocessing terminate funktioniert nicht

Verfasst: Samstag 19. Oktober 2013, 16:31
von DasIch
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.