steve abrams wrote:
> * code 'paraphrased' for simplicity *
> 
> Hi all,
> 
>     I have a script which goes to a subroutine. Within the
> subroutine, there exists:
> 
> $pid = fork;
> push(@pids, $pid);
> unless ($pid)
> {
>        my $var = new Object;
>        if (not $var->method_that_evokes_a_child()) {Exit;}
>        exit 2;
> }
> 
> where the Exit subroutine exits with a number other than 2. The parent
> process (before this subroutine is called), does a
> 
> $foo = waitpid $pids[$count], &WNOHANG;
> 
> and handles each child's return value.
> 
> The problem I am having:
> 
> CHILD_ERROR (or $?) on the outside of the subroutine is using the
> value from the child-evoking-method, ignoring the exit code I am
> giving. For example, if method_that_evokes_a_child exits with '1',
> the main parent gets '1' from its child, rather than '2' (the
> argument passed to 'exit()') if method was successful.
> 
> So, perhaps I'm confused with how the final "exit" of a child behaves
> with regard to $?. If I don't call the child-evoking method, the
> original parent gets the "exit" code of the child. I want this to be
> the case even when I call the child-evoking method. Why does it not
> do this, and how can I 'fix' it?
> 
> If anyone understands what I'm trying to explain, any help would be
> appreciated. Thanks!

I for one can't understand what you're trying to explain. Can you code up a
simple self-contained example that illustrates the problem (i.e. something
we can run)? I'm not clear on what you mean by "main parent" and
"child-evoking method", etc.

I will say that wait(2) only applies to immediate descendants, not
"grandchildren", if that's what you're doing...

-- 
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