[gl-como] Fork class in c++

Pietro "m0nt0" Montorfano monto@gl-como.net
Lun 15 Gen 2007 22:11:19 CET


Ciao a tutti, vi sottopongo il seguente problema che riguarda la
programmazione c++ su linux, spero che ci sia qualcuno che mi possa dare
una mano.

Allora, sto facendo una classe in c++ per gestire dei processi (tre
server che girano in contemporanea, fanno cose diverse e non possono
essere tre programmi diversi), ho guardato e fatto esperimenti con i
thread ma la ciulata è che i thread non possono essere killati, allora
mi son detto, vado di fork e risolvo il problema, e cosi effettivamente
è stato. Posso controllare tutti i child creati, farli partire, killarli
e tutto. La classe ha un metodo virtual Execute che ereditato ed
implementato contiene il codice da eseguire nel processo child.

Ora il problema che mi si pone è che uccidendo il child (minchia
l'infanticidio :D), mi resta uno zombie (processo con tutto libero ma
con ancora il pid) e resta li fino a quando non viene terminato anche il
padre, questo è il comportamento standard, ci mancherebbe, ma mi da un
fastidio esagerato, anche perchè pensando che con i vari controlli
magari vengono lanciati e rilanciati i vari child, dopo un mese di
server funzionante mi ritroverei con una frega di processi zombi.

Quindi ho pensato: faccio una cosa fichissima, doppia fork e rendo
orfano l'ultimo processo che cosi verrebbe ereditato da init e, se
killato, non lascerebbe zombie.
Esempio:

Programma Main
Fork1() -> creo il processo temporaneo figlio di Main
	Programma Tmp
	Fork2() -> creo il Child reale figlio di Tmp
		Programma Child
	Killo il processo Tmp
Vado avanti a farmi i bit miei
		vado avanti

in questo modo se dovessi killare Child non dovrebbero esserci zombie.

Ok, dopo questo papiro 3 domande:

1) E' giusto quanto pensato?
2) Se si posso passare il pid di child a main?
3) Se si come cazz faccio??

Azz che roba complicata, spero si capisca.

Ciao!!

Pietro


Maggiori informazioni sulla lista gl-como