use fork/exec() instead system, MKWS-157
[mkws-moved-to-github.git] / test / bin / bomb.pl
1 #!/usr/bin/perl
2 # Copyright (c) 2014 IndexData ApS. http://indexdata.com
3 #
4 # bomb.pl - wrapper to stop a process after N seconds
5 #
6
7 use Getopt::Long;
8 use POSIX ":sys_wait_h";
9
10 use strict;
11 use warnings;
12
13 my $debug = 0;
14 my $help;
15 my $timeout = 100;
16 my $pid;
17
18 binmode \*STDOUT, ":utf8";
19 binmode \*STDERR, ":utf8";
20
21 sub usage () {
22     <<EOF;
23 usage: $0 [ options ] command args ....
24
25 --debug=0..3    debug option, default: $debug
26 --timeout=1..N  timeout in seconds, default: $timeout
27 EOF
28 }
29
30 GetOptions(
31     "help"      => \$help,
32     "debug=i"   => \$debug,
33     "timeout=f" => \$timeout,
34 ) or die usage;
35
36 my @system = @ARGV;
37
38 die usage if $help;
39 die usage if !@system;
40
41 #
42 # use fork/exec instead system()
43 #
44 $pid = fork();
45 die "fork() failed: $!" unless defined $pid;
46
47 # child
48 if ($pid) {
49     alarm($timeout);
50     exec(@system) or die "exec @system: $!\n";
51 }
52
53 # parent
54 else { }
55
56 1;
57