OVH Cloud OVH Cloud

Forker sous SOAP::Lite

2 réponses
Avatar
Nicolas
Bonjour,

J'aimerai qu'un client puisse lancer une requête par SOAP sur un serveur
perl utilisant SOAP::Lite.

Le problème est que la tache demandée prend beaucoup de temps d'ou l'idée de
lancer la chose en tache de fond en faisant un fork dans la "sub" concernée.

mais visiblement les PID enfants ne meurrent pas !


Voici un bout de progamme pour illustrer la chose:

#--------------------------------------#

#!/usr/bin/perl -w

use strict;
use SOAP::Transport::HTTP;

my $daemon = SOAP::Transport::HTTP::Daemon
-> new (LocalPort => 8989)
-> dispatch_to('Test')
;

print "Contact to SOAP server at ", $daemon->url, "\n";
$daemon->handle;


package Test;

sub toto {

if ( fork() ) {
# ici, c'est le process parent
return 'ok';
} else {
# Simule un long traitement...
sleep 10;
return 1;
}
}

1;
#--------------------------------------#

et le client pour tester:

#--------------------------------------#

#!/usr/bin/perl -w

use SOAP::Lite;

print SOAP::Lite
-> uri('http://localhost/Test')
-> proxy('http://localhost:8989')
-> toto()
-> result . "\n";

#--------------------------------------#

Merci pour votre aide !

Nicolas

2 réponses

Avatar
dominix
Nicolas wrote:
Bonjour,

J'aimerai qu'un client puisse lancer une requête par SOAP sur un
serveur perl utilisant SOAP::Lite.

Le problème est que la tache demandée prend beaucoup de temps d'ou
l'idée de lancer la chose en tache de fond en faisant un fork dans la
"sub" concernée.

mais visiblement les PID enfants ne meurrent pas !



Sous Mac OS X (10.1.5) cela fonctionne plutot bien

perl client
ok

ps -ax |grep perl
3389 con- Z+ 0:00.00 (perl)
3337 p1 S+ 0:01.54 perl server

sauf que le child devient Zombie au lieu de mourrir
et il disparait lorsque le parent meurt.
le cas de zombification ne sont pas alarmant car les ressources
sont libérés.

j'ai pas testé sous linux (j'ai que des serveurs de prod)
et sous cygwin ca core dump au deuxieme appel client ;-/

--
dominix

Avatar
Samuel Mouniée
sauf que le child devient Zombie au lieu de mourrir
et il disparait lorsque le parent meurt.
le cas de zombification ne sont pas alarmant car les ressources
sont libérés.


pour qu'un fils meure proprement, il faut que le pere fasse au moins un
wait apres un sig_child. en gros et en perl, ca donne :

$SIG{CHLD} = sub { wait };


.s'nuoM