#!/usr/bin/perl # # Wrapper takes is the arguments of the blastall binary # changes directory to binarys directory # adds binary name # runs it # Needs to be able to trap normal signals and definedly kill the process, # as it ignores some which it should not. # use warnings; use strict; use File::Basename; use sigtrap qw(handler catch_signal normal-signals); my $pid; # blastalls pid after fork sub catch_signal { print STDERR "SIGNAL:",shift," blast should be $pid\n"; kill (9,$pid); exit; } print "Going\n"; my $dir=dirname($0); chdir $dir; unshift (@ARGV,"./blastall"); $pid = fork; die "Can't fork: $!\n" unless defined $pid; if ($pid) { # Parent. Do whatever you want print "In parent.\n"; my $kid=0; do { waitpid ($pid,0); } until ($kid == -1); } else { # Child print "In child.\n"; exec (@ARGV) or die "Unable to exec: $!"; } print "After fork if.\n"; # this was used after `@ARGV` to get error message if executing failed # if ($?!=0) { # warn "@ARGV failed: ",$?,":",$?>>8,"\n"; # exit $?; # } print "Exiting.\n"; exit;