Newsgroup: it.comp.lang.c
Titolo: distruggere gli zombie..

azz, rieccomi :)
mi ero dimenticato di un'altra cosetta..
i pargoletti creati dalla fork(), se hanno un papa' che si fa i 
cazz... cavolacci suoi, e taglia i rapporti senza neanche una wait(),
quando muoiono non scompaiono definitivamente, ma si trasformano
in zombie.
problema: come uccidre gli zombie?
sia exit() che _exit() non lo fanno, 
quindi devo per forza inviare un SIGTERM o SIGKILL dal chiamante, giusto?
[ditemi che non e' necessario, pls, altrimenti mi scombusola di brutto
il progr, devo metterci dentro un arrey 
status[MAX_NUM_CHILD] 
in cui metto dentro, per esempiom, al processo numero 3, lo status:
status[2]=1 se in esecuzione
status[2]=0 se morto eliminato distrutto
status[2]=PID se zombie,
il processo chiamante ogni tanto controlla l'array condiviso, e se trova
un qualche (status[n] != 0 && != 1), manda un SIGTERM al processo n+1, e 
pone
status[n]=0     //perche' ha appunto ucciso lo zombie
un altra funzione del processo padre scandisce l'array e se trova un
status[m]=0
vul dire che puo' forkettare, e allora lo pone 1..
insomma: altre 3 o 4 funzioni in piu', seghe mentali a iosa...
Son abbastanza un apprendista col C, quindi non ho la malizia di
un progr esperto che risolve i problemi anche piu' incasinati con
un paio di istruzioni.. io per lo piu' creo routines _da_paura_ 
incasinatissime, e per lo piu' inutili :)
e tutto solo per eliminare gli zombi... mi sembra un po' eccessivo, o no?
non ci sono altri metodi per risolvere il probl?
un altro grazie come anticipo..
ciao
fritz
PS: non so se avete capito qualcosa da questo e dall'altro post, mi sono
svegliato da poco e rieri sera, appena rincasato, non ho potuto fare a 
meno di tirare quasi mattina sul vi e gcc :) perdonate il casino che
quasi sicuramento ho fatto nel spiegare la questione :) 

: meno di tirare quasi mattina sul vi e gcc :) perdonate il casino che
: quasi sicuramento ho fatto nel spiegare la questione :)
seee casino...
ma che dici !?!?!?!
Ciao

Ma per quale motivo ti interessa tanto uccidere
uno zombie (scusa ma ho letto solo molto in fretta
il tuo post).
Uno zombie non esiste piu', e' rimasto allocato
solo lo spazio necessario per contenere il suo
status, se proprio vuoi eliminarlo fai una wait
(se non vuoi rischiare usa quelle non bloccanti,
penso sia o wait3 o wait4 con apposite opzioni).
E ti sparisce lo zombie.
Ma che fastidio ti da quel povero non-morto ?????
-- 
Zack
Stefano Zacchiroli
zacc...@cs.unibo.it
za...@comune.budrio.bo.it
ICQ# 33538863
"Never understimate the dark side"

 in zombie.
Per  evitare     questa trasformazione in genere si usano
le wait, wait3, wait4, waitpid, in modo tale che
il padre non muoia prima che siano morti i figli
(esiste per alcune di esse l'opzione WNOHANG che
rende la wait non bloccante per il padre se non ci sono
piu` figli che devono morire).
Scusate la terminologia tipo "sterminio di una famiglia"
Marco Guidi

 wrote:
scusa, potresti ripostarmi la risposta?
non leggo nulla..
devo aver fatto un po' di casini con le impostazioni del killfile
[o forse e' sempre colpa di interbusiness? :) ]
grazie e scusa
ciao
fritz [killato dal suo killfile ... ggrrrrr...]

 wrote:
potresti ripostarmela anche tu per piacere?
grazie
ciao
fritz
ecc ecc

Bisogna definire un handler per SIGCHLD.
ciao.

