projects
/
mkws-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/mkws
[mkws-moved-to-github.git]
/
test
/
bin
/
bomb.pl
diff --git
a/test/bin/bomb.pl
b/test/bin/bomb.pl
index
0f434d0
..
94f5c8d
100755
(executable)
--- a/
test/bin/bomb.pl
+++ b/
test/bin/bomb.pl
@@
-42,26
+42,34
@@
die usage if !@system;
# be ignored
eval {
require BSD::Resource;
# be ignored
eval {
require BSD::Resource;
- BSD::Resource::setrlimit("RLIMIT_CPU", $timeout, 2*$timeout) or die "Cannot set CPU limit: $!\n";
+ BSD::Resource::setrlimit( "RLIMIT_CPU", $timeout, 2 * $timeout )
+ or die "Cannot set CPU limit: $!\n";
};
if ($@) {
};
if ($@) {
- warn "WARNING: things would go more nicely with the BSD::Resource package\n";
+ warn
+ "WARNING: things would go more nicely with the BSD::Resource package\n";
}
}
-
#
#
-# use fork/exec instead system()
+# configure signal handlers
#
#
-$pid = fork();
-die "fork() failed: $!" unless defined $pid;
+$SIG{ALRM} = sub {
+ my $pgid = getpgrp();
-# child
-if ($pid) {
- alarm($timeout);
- exec(@system) or die "exec @system: $!\n";
-}
+ warn "Alarm handler got called after $timeout seconds\n";
+ warn "Kill now the process group...\n\n";
+
+ # kill process group
+ kill "INT", -$pgid;
+};
-# parent
-else { }
+# don't kill ourself
+$SIG{INT} = "IGNORE";
+
+alarm($timeout);
+
+system(@system) == 0
+ or die "system('@system') failed: ?='$?', !='$!', ^E='$^E', ?='$?'";
1;
1;
+