[bcn-pm] Perls i forks

Alex Muntada alexm at ac.upc.es
Sun Mar 21 16:44:20 CST 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

* Xevi Ezquerra Elias:  [2004-03-20/10:10:45 +0100]

> Crear un proces fill sense que quedar "zombie" (perdi parentesc
> amb el pare). El cost es elevat ( o molt elevat) ja que per
> crear el proces independent es fan 2 forks

Aquesta tècnica provoca la demonització del procés i no crec
que aquest sigui l'objectiu que pretenia en Lluís. El cost de
demonitzar un procés és elevat però només es realitza un cop,
al començament de l'execució del daemon; a partir d'allí els
fills que atenen les peticions no es demonitzen pas, tot el
contrari, normalment se'ls fa un wait per obtenir-ne l'estat
de finalització. Per cert, una pipe no permet obtenir aquesta
informació si el fill es mor sobtadament (e.g. SEGV), així que
el resultat que obté un wait sempre és molt interessant.

En qualsevol cas, si voleu demonitzar processos, sempre podeu
recórrer al CPAN, on trobareu el mòdul Proc::Daemon.

> 	$pid = fork();
> 	if ($pid < 0) {
> 		print "Soc el proces fill i no puc fer Fork()!!!\n";

Si el resultat del fork és negatiu només pot valer -1 perquè
s'ha produït un error a la crida i se n'informa al pare, no
pas al fill. El codi de l'error el codifica la variable entera
errno, com és habitual.

Pel que fa al bloqueig del pare quan llegeix d'una pipe, que
era l'altre problema que comentava en Lluís, només cal utilitzar
la crida a sistema select (perldoc -f select), que permet
multiplexar les operacions d'entrada/sortida de forma eficient.

use Perl;

- --
Alex Muntada <alexm at ac.upc.es>
http://people.ac.upc.es/alexm/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQFAXhq2LdxCGS3zaBERArmwAJ0Ya4yB32SG5/tlvQXcWMikk3Bb8QCeMLub
PTIcD0cbu2j4PMHw/zvcUDM=
=CQQr
-----END PGP SIGNATURE-----



More information about the Barcelona-pm mailing list