Thread Zeitbegrenzung für reguläre Ausdrücke (40 answers)
Opened by Crian at 2005-04-25 13:24

Crian
 2005-04-27 11:34
#54186 #54186
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Ah danke, das werd ich ausprobieren. Die RE's sind von mir, und mir muss ich schon trauen, "ich" könnte ja auch gaaaanz schlimme Sachen in den Code einbauen ;)

Kann man das auch auf den Block begrenzt festsetzen, in dem diese Evals verwendet werden, oder gilt das dann für die ganze Datei (wegen dem use)?

Edit: Hmmm die anderen Dinge mit use strict "blablubb" gelten ja auch nur lokal...

Ich hab das jetzt mal eingebaut, leider bringt mir das anscheined aber auch keine Opcodes, selbst wenn ich den Timer auf eine Sekunde runter setze, bekomme ich keine Timer-Meldungen.


Edit2: Ich habe obiges Fork-Programm noch etwas verschönert zu

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/perl
use strict;
use warnings;

use POSIX ":sys_wait_h";


pipe PREAD, CWRITE; # child -> parent

my $parent_pid = $$;


if (my $pid = fork()) {
parent($pid);
}
else {
child();
}


sub child {
close PREAD; # child - close parent end of pipe
print "child: id $$ dad $parent_pid\n";

print "child: start of proccess\n";
syswrite CWRITE, "0\n";
for (1..9) {print "child zZZZzzz\n";sleep 1;}
print "child is awaking\n";
syswrite CWRITE, "$_\n" for 1 .. 10;
print "child ending\n";
exit;
} # sub child


sub parent {
my ($pid) = @_;
close CWRITE; # parent - close child end of pipes
print "parent id $$ child $pid\n";

my @erg;
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm 15;
while (waitpid($pid, WNOHANG) == 0) {
print "parent: kind lebt noch\n";
sleep 1;
}
alarm 0;
};
alarm 0; # Ist das wirklich notwendig?
if ($@) {
die "other error : $@"
unless $@ eq "alarm\n"; # propagate unexpected errors
warn "parent : child got time out!\n";
# ... Maßnahmen ergreifen um klarzumachen, dass die Verarbeitung
# unvollständig ist ...
}
else {
chomp(@erg = <PREAD>);
print "parent got ", join(' - ', @erg), "\n";
print "parent : ", (eof(PREAD)?'ENDE':'keine Ende'), "\n";
}
kill TERM => $pid; # Kind abschießen (in beiden Fällen, einmal als Zombie,
# einmal läuft es noch und verbraucht Rechenzeit)
} # sub parent


Die Frage ist, ob dieses zweite alarm 0 wirklich notwendig ist. Denn wird der eval-Block verlassen, so wurde entweder der Alarm schon ausgelöst oder wieder deaktiviert.


Edit 3: Mein Hauptproblem konnte ich überraschend durch eine winzige Änderung lösen, das Problem war durch aus Versehen hereingerutschte mehrfache Leerzeichen verursacht worden.

Trotzdem bin ich an einer generellen Zeitüberwachung interessiert, und falls sich da noch etwas mit den opcodes oder wie auch immer erreichen lässt, fände ich das sehr erfreulich.\n\n

<!--EDIT|Crian|1114588058-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Zeitbegrenzung für reguläre Ausdrücke