UPDATE:
Ok, got it fixed. Shoud be $kid = waitpid(-1,0). I quite don't understand how it matches the correct PID, but this seems to be working.
I'm having problems with the execution and fork. Probably as I have never used it before. So is this correct way to use it? Where does the waitpid go and how does it work? How the program flow go from here?
#!/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 proce
+ss,
# 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;
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|