Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8277[/thread]

Alarm() macht nicht was es soll



<< >> 4 entries, 1 page
Oliver_M
 2006-08-28 14:36
#69307 #69307
User since
2005-11-23
19 articles
BenutzerIn
[default_avatar]
Hallo,
ich habe mal wieder ein Problem, diesmal mit Alarm ;).
In meinem Skript wird das Sub webserverdialog aufgerufen. Da das Sub, in diesem Fall nicht länger wie 10 Sekunden laufen soll,
habe ich versucht mit alarm einen timeout zu definieren. Dummerweise läuft das Sub immernoch deutlich länger wie 10 Sekunden, sprich der Timeout greift nicht.
Hat jemand eine Idee wo der Fehler liegen könnte?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
eval
{
local $SIG{ALRM} = sub { die "timeout" };
alarm(10);
webserverdialog($uname, $pw, $log);
alarm(0);
};
if ($@)
{
print "Timeout!!";
}
else {
print STDOUT "Alles klar!\n";
}
vayu
 2006-08-28 14:43
#69308 #69308
User since
2005-01-13
782 articles
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;

local $SIG{ALRM} = sub { die "timeout" };
alarm(10);
webserverdialog();
alarm(0);

sub webserverdialog {
while(1) {
my $bla = 1+1;
}
}


läuft bei mir genau 10 sekunden.

was machst du denn im webserverdialog()?


wenn ich ein eval um den obigen block herumsetz läuft ebenfalls 10 sekunden, allerdings ohne ausgabe vom die.\n\n

<!--EDIT|vayu|1156761887-->
Oliver_M
 2006-08-28 14:49
#69309 #69309
User since
2005-11-23
19 articles
BenutzerIn
[default_avatar]
Ich logge mich in eine Webanwendung ein, und wenn das passiert ist, wieder aus. Für die Aufrufe verwende ich WWW::Mechanize.

Habe den Alarm auch schon auf 2 Sekunden eingestellt... hat aber trotzdem irgendwie nicht funktioniert.

Muss dazu sagen das ich auch noch nicht soo viel Ahnung von Perl habe...

Grüße
Olli
Oliver_M
 2006-08-28 16:53
#69310 #69310
User since
2005-11-23
19 articles
BenutzerIn
[default_avatar]
Habe das Problem jetzt etwas eingrenzen können, aber leider immernoch keine Lösung.

Hier mal einige Auszüge aus dem Sub:


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub webserverdialog
{
my $uname = shift;
my $pw = shift;
my $log = shift;
$counter++;
$log->msg(1, "Durchgang Nr.: $counter \n");
-----> Bis zu diesem Punkt klappt es <----
# Den Agenten initialisieren
my $agent = WWW::Mechanize->new(autocheck=>1);
$agent ->cookie_jar(HTTP::Cookies->new());

....

Nach dem der Agent initialsiert wurde, greift das Alarm nicht mehr. Hat dafür jemand eine Erklärung und eine Lösung?

Im vorraus schonmal vielen Dank
Grüße
Olli
<< >> 4 entries, 1 page



View all threads created 2006-08-28 14:36.