Hello list,

I recently encountered a small oddity.  Suppose I have a process A:

#!/usr/bin/perl

use strict;

print "Hello \n";
sleep 1;
print "Goodbye\n";
exit 9;

Simply shows some out and gives a certain exit code. A second process, simply calls fork, execs the child in a process and waits for the child in the other process. In Perl this can look like this:

my $cmd = "/home/user/proces.pl";
my $pid = fork();
if($pid == 0){
    print "Hi I'm a child\n";
    exec $cmd or die "Failed to run $cmd\n";
}else{
    print "Hi I'm a parent waiting for child with PID: $pid\n";
    my $ret = waitpid($pid,0);
    print "$pid exited with code ". ($?>>8) ."\n";
}

The oddity i located in the last line. It seemd that I had to divide $? by 256 (or shift over 8 positions to the right) to get the correct exit code. So my question is:
a) Is there an other way to wait for a child to die and get the exit code
b) Can someone explain the odd behaviour of the exit code ?

greetings
E.

--
Elie De Brauwer


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to