[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