[Python] gestire processi figli

Roberto De Ioris roberto a unbit.it
Ven 29 Nov 2013 19:59:13 CET


> 2013/11/27 Manlio Perillo <manlio.perillo a gmail.com>:
>> La cosa pił complessa e restare in attesa fin quando un processo
>> termina.
>> Su sistemi POSIX puoi usare sigtimedwait, su FreeBSD kqueue con apposito
>> filtro, su Linux epoll con quell'orrore di signalfd, su Windows
>> WaitForMultipleObjects.
>
> Molto interessante. Sto affrontando esattamente questo problema in
> psutil, ovvero aspettare che un certo PID termini specificando un
> timeout:
> https://code.google.com/p/psutil/issues/detail?id=445
> Ho dato un occhio a sigtimedwait() (che tra l'altro hanno esposto in
> Python 3.3).
> Vedo che si aspetta una lista di segnali e la cosa mi spiazza un po'.
> Dovrei passargli SIGTERM e SIGKILL? Ci sono altri segnali che causano
> la morte di un processo e che dovrei prendere in considerazione?
>
> ---

La morte di un child e' segnalata da SIGCHLD (di default, occhio pero' che
e' trappabile), ma non lavorerei con i segnali unix (per questo specifico
problema) neanche sotto tortura.

Dove non hai a disposizione kqueue (e WaitForMultipleObjects) vai di
polling e waitpid con WHOHANG:

while 1:
    aspetta...
    if waitpid(blah blah, WNOHANG):
        break


-- 
Roberto De Ioris
http://unbit.it


Maggiori informazioni sulla lista Python