Schrift
[thread]6391[/thread]

Scriptabbruch nach x Sekunden



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
[E|B]
 2004-07-10 22:14
#84152 #84152
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hallo!
Gehe ich richtig der Annahme, dass ein ausgeführtes Perl Script mit folgendem Code nach 180 Sekunden automatisch abgerochen wird?

Code: (dl )
1
2
$SIG{ALRM} = sub { exit };
alarm(180);
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
sri
 2004-07-10 22:17
#84153 #84153
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Warum fragst du etwas was sich so einfach ausprobieren lässt? :)
kabel
 2004-07-10 22:18
#84154 #84154
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ja, es sei denn, du setzt ihn irgendwo zurück.
dann natürlich nicht haha :p
-- stefan
[E|B]
 2004-07-10 22:29
#84155 #84155
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich habe es ausprobiert und es hat nicht funktioniert.
Vielleicht habe ich auch nur einen Fehler beim Einbauen gemacht. Wenn es damit aber klappt ist es ja gut. :)
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Strat
 2004-07-11 00:24
#84156 #84156
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
folgendes konstrukt verwende ich recht gerne:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$SIG{ALRM} = sub { die "timeout\n"; }
eval {
 alarm(180);
 # ....
 alarm(0); # reset
};
if ($@) {
 if ($@ =~ /timeout/) {
   print "Timed out\n";
 }
 else {
   die "Error: $@\n";
 }
}


falls ich mich irgendwo vertippt habe: perldoc -f alarm

ich glaube, dass alarm unter win32 noch immer nicht richtig funktioniert (habe es aber schon laenger nicht mehr unter Win32 ausprobiert)\n\n

<!--EDIT|Strat|1089491102-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
anti
 2004-07-12 01:46
#84157 #84157
User since
2003-11-29
155 Artikel
BenutzerIn
[default_avatar]
Hi,

dein Skript wird so tatsächlich abgebrochen, ausser es werden gerade sog. "langsame Systemaufrufe" behandelt, da diese unter Perl automatisch neu gestartet werden (<>, open.., eigentlich alles was mit I/O zu tun hat).
Du kannst das ganze, wie Strat beschrieben hat, umgehen - allerdings funktioniert diese Variante unter Windows leider nicht.

greetz, anti
sri
 2004-07-12 02:52
#84158 #84158
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=anti,11.07.2004, 23:46]dein Skript wird so tatsächlich abgebrochen, ausser es werden gerade sog. "langsame Systemaufrufe" behandelt, da diese unter Perl automatisch neu gestartet werden (<>, open.., eigentlich alles was mit I/O zu tun hat).[/quote]
Darüber das "slow syscalls" deine Signale blockieren könnten, braucht sich heutzutage wohl keiner mehr Sorgen machen. ;)

Zumindest bei den UNIX derivaten. *ggg*
ptk
 2004-07-12 12:29
#84159 #84159
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ein Problem koennten Safe signals seit perl 5.8.x sein. Signale werden seitdem nur zwischen der Abarbeitung von Opcodes bearbeitet. Wenn die Abarbeitung eines Opcodes sehr langsam ist (z.B. sort auf einem grossen Array oder bei einem langsamen XS-Aufruf) oder gar haengt, dann wird auch das Signal nicht ausgeliefert. Mehr Informationen liefert der Abschnitt "Deferred Signals (Safe Signals)" in der perlipc-Dokumentation.
Strat
 2004-07-12 23:33
#84160 #84160
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
kann es sein, dass dieses verhalten nur in 5.8.1 und 5.8.2 verfuegbar ist, in neueren versionen aber wieder das alte verhalten mit den "unsafe signals" gilt? ich erinnere mich dunkel daran, da mal was gelesen zu haben, bin aber zu faul, da nochmal nachzuschauen...\n\n

<!--EDIT|Strat|1089660835-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
sri
 2004-07-13 01:06
#84161 #84161
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Strat,12.07.2004, 21:33]kann es sein, dass dieses verhalten nur in 5.8.1 und 5.8.2 verfuegbar ist, in neueren versionen aber wieder das alte verhalten mit den "unsafe signals" gilt? ich erinnere mich dunkel daran, da mal was gelesen zu haben, bin aber zu faul, da nochmal nachzuschauen...[/quote]
Nein, "safe signals" sind immernoch der standard.

Und es kann sein das längerlaufende opcodes ein signal verzögern, denn wenn ein signal eintrifft während ein opcode läuft wird lediglich ein flag gesetzt.
Erst wenn der opcode fertig ist wird das flag dann bemerkt und der signal handler ausgeführt.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-07-10 22:14.