[Linuxtrent] Re: python avvio servizi e controllo pid

  • From: Claudio <realtega@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Wed, 06 Apr 2005 23:31:23 +0200

Grazie per la spiegazione, dunque l'approccio che ho adottato non è
corretto.Cerco di valutare un'altra soluzione.

Grazie ancora

Claudio


Il giorno mer, 06-04-2005 alle 21:33 +0200, Matteo Ianeselli ha scritto:
> Il giorno mer, 06-04-2005 alle 15:39 +0200, Claudio ha scritto:
> 
> 
> > Il problema è che quando avvio un processo in tale modo mi ritrovo si
> > ad avere il pid... ma il processo risulta in stato defunct.
> > 
> > esempio: pid = os.spawnl(os.P_NOWAIT, '/usr/sbin/smbd',' ')
> > ottendo il pid 3694
> > 
> > ma la situazione dei processi è la seguente...
> > 
> > 3694 pts/2    00:00:00 smbd <defunct>
> >  3695 ?        00:00:00 smbd
> >  3696 ?        00:00:00 smbd
> > 
> > Sicuramente mi sfugge qualcosa... avete qualche suggerimento?
> 
> 
> Molto in breve: perché smbd è un demone, il processo che tu avvii si
> forka a sua volta e poi termina subito, tu ricevi SIGCHLD ma non fai
> wait(2) per cui ti ritrovi con uno zombie (che ti resta finché il padre
> non termina a sua volta, o finché non fa wait(2) di suo).
> 
> 
> 
> Meno in breve: un demone, per essere veramente tale, deve:
> 
> 1) chiudere tutti i file descriptor aperti che eredita (quantomeno
>    stdin, stdout e stderr)
> 
> 2) cambiare la sua directory corrente in '/' (non indispensabile, ma
>    è buona educazione, altrimenti poi non si riesce più a smontare
>    il volume da cui era stato avviato)
> 
> 3) entrare a far parte di un nuovo process group e staccarsi dal
>    terminale controllante.
> 
> Per fare la (3) correttamente, il processo deve necessariamente
> fork(2)are: poi il figlio va avanti (finalmente come demone), mentre il
> padre termina.
> 
> Dopodiché è noto che quando un processo termina, di esso rimane il solo
> exit code, che il padre (il tuo script Python) deve andare a recuperare
> (via wait(2) o varianti). E finchè il padre non lo recupera, il figlio
> rimane zombie (i.e. rimane elencato nella lista dei processi, ma di esso
> rimane il solo exit code). Quando il padre termina, il figlio zombie
> viene adottato da init (pid 1), che di quando in quando fa una wait(2)
> che permette allo zombie di andare verso pascoli più verdi.
> 
> 
> 
> 
> 
> 
> > 
> > Grazie in anticipo
> -- 
>   |   \    \  | ___|_  |_  |  ianezz a casa sua... :-)
>   |  _ \  | \ | _|    /   /   Verba volant, scripta
>  _|_/  _\_|  _|____|___|___|  manent, data corrupted
> 
> 

-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: