2010-08-23 6 views

Répondre

3

Si vous utilisez un CGI (non mod_perl ou FastCGI), il peut être utile simplement ajouter les éléments suivants vers le haut du code:

alarm 30; # SIGALRM delivered to this process after 30 secs 

Si le programme n'a pas de gestionnaire pour SIGALRM, il mourront.

Exemple:

use strict; 
use warnings; 
alarm 2; 
my $n = 0; 
while (1) { 
    print "$n\n"; 
    sleep 1; 
    $n++; 
} 
__END__ 
$ perl alr 
0 
1 
Alarm clock 

Vous pouvez choisir ce qui devrait se produire lorsque le délai d'attente se produit, comme ceci:

$SIG{ALRM} = sub { 
    # do stuff 
}; 

Vous placerez ce code avant d'utiliser l'alarme().

Un exemple pourrait être l'envoi d'un e-mail pour vous informer que le script a pris plus de temps que prévu, ou peu importe.

Les alarmes peuvent également être utilisés comme chiens de garde pour les sections spécifiques du code, comme:

alarm 5; # shouldn't take longer than 5 seconds. if not, die. 
do_stuff(); 
alarm 0; # reset the alarm 

Hope this helps.

+0

Merci pour cela, je sais ce que vous voulez dire. Mais qu'en est-il si j'utilise mod_perl pour apache. Où puis-je définir le temps d'exécution maximum comme en PHP. Est-ce que quelqu'un le sait par exemple pour (l) xammp? – Robert

+1

Vous pouvez faire la même chose que ci-dessus, seulement sous mod_perl il va tuer l'enfant Apache plutôt que juste le CGI. Sous mod_perl. vous pouvez utiliser quelque chose comme: PerlSetEnv PERL_RLIMIT_CPU 120. Regardez les documents mod_perl pour cela! – mfontani

Questions connexes