[bcn-pm] timeout que no em mata el procés
Alex Muntada
alexm a alexm.org
dij mar 15 03:39:06 PDT 2012
+ Arnau Bria <listsarnau a gmail.com>:
> La primera és que tinc un timeout que em crida un procés (que
> acostuma donar timeouts), però no el mata. Es queda en defunct
> fins que reinicio el meu dimoni:
Això és perquè mates el pare dels processos fills i aleshores ningú
fa el wait corresponent. Fer un killall -9 a sac té conseqüències ;-)
> El codi és
> my $command="diagnose \-f \-\-host=$conf->{maui_server}";
> my @diagnose;
> eval {
> local $SIG{ALRM} = sub { `killall -9 diagnose`; die
> "Timeout\n" }; alarm 5;
> @diagnose=`$command`;
> alarm 0;
> };
Com que estàs barrejant codi Perl amb shell, et serà difícil
gestionar correctament els fills i no podràs evitar els defuncts.
El meu consell és que miris de crear els fills des del propi Perl,
que guardis els PID i que aleshores els matis com cal i els hi
facis un wait perquè no siguin zombies.
> Com puc fer per matar el procés que m'obre el meu script?
El procés ja està mort però no enterrat (zombie o defunct).
Al perlipc parla de com gestionar-los però només funciona
si els has parit des de Perl, clar:
http://perldoc.perl.org/perlipc.html#Signals
L'alternativa és plantejar-te si et cal crear fills (depèn de la feina
que hagis de fer) o utilitzar un framework d'esdeveniments com
AnyEvent. Però ja t'aviso que això és tot un món en sí mateix.
> Com puc veure la memòria consumida per les meves variables ?
> Em dona la sensació que no estic buidant bé algun hash / array i
> que va aganat dades i dades fins que el meu procés consumeix
> 600MB
Devel::Size és per això i és trivial d'utilitzar.
Salut!
--
Alex Muntada <alexm a alexm.org>
http://alexm.org/
Més informació sobre la llista de correu Barcelona-pm