[Python] gestire processi figli

Roberto De Ioris roberto a unbit.it
Ven 29 Nov 2013 20:11:44 CET


>> 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
>
> Ho il requirement di farlo per qualunque PID, non solo i figli del mio
> processo.
>
>

tutta la famiglia wait() puo' attendere anche i process group, se ti
riferisci ad altro, beh non si puo' fare, e' contro lo standard POSIX :)

un approccio estremo (che pero' e' usato anche da upstart) e' di
agganciare una ptrace che segua le fork(), ma probabilmente e' un filino
esagerato...

P.S. su Linux in realta' la syscall prctl ha aggiunto una serie di nuove
modalita' per cui il legale tra parent e children (e nipoti) puo' essere
modificato in modi divertenti

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


Maggiori informazioni sulla lista Python