Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Getting exit status from forked script

by hotshot (Prior)
on Jan 29, 2004 at 12:51 UTC ( #324922=perlquestion: print w/replies, xml ) Need Help??
hotshot has asked for the wisdom of the Perl Monks concerning the following question:

Hello all!

I doing something as follows to run an external script with timeout on it + catching it's STDOUT:
eval { alarm($timeout); pipe(READ,WRITE); if ($pid = fork) { $SIG{CHLD} = sub { 1 while (waitpid(-1, WNOHANG)) > 0}; close(WRITE); } else { die "Cannot fork: $!" unless defined $pid; open(STDOUT, ">&=WRITE") or die "Cannot redirect STDOUT: $!"; close(READ); exec ("$extScript") or die "Cannot exec $extScript: $!"; } while(<READ>) { push(@output, $_); } close(READ); alarm(0); }; ## End eval if ($@) { if ($@ =~ /Timeout/) { print "Reached timeout\n"; } else { alarm(0); die; } } else { print Dumper(\@output); }
That's working fine.

The question is how can I get the exit status of the script if it was finished before reached timeout.

Thanks

Replies are listed 'Best First'.
Re: Getting exit status from forked script
by Abigail-II (Bishop) on Jan 29, 2004 at 13:06 UTC
    The exit value will be available in $? after you've reaped the process with waitpid. The manual of waitpid could have told you that as well.

    Abigail

Re: Getting exit status from forked script
by Ao (Friar) on Jan 29, 2004 at 14:01 UTC
    It looks like you've taken the main if($pid=fork) - else code from the Perl Cookbook 16.10 but you've forgotten about waitpid. Either go back to the Cookbook and look closer or use perldoc -f waitpid to read up on its use. 'tis pretty straight-forward.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://324922]
Approved by rinceWind
help
Chatterbox?
[Corion]: marto: Heh ;) You're just further enabling their lazyness :-D
[marto]: they still don't know there was a problem, nobody told them! :P
[Corion]: marto: Ow! I would assume there is a cron job monitoring the free disk space and automatically opening a ticket at 90%, 95% and 100% usage...
[Corion]: Even we had automatic emails back when we maintained the machine ourselves...
[marto]: Corion you under estimate how lazy these admins are :P
[Discipulus]: we too; using opsview alarms
[marto]: the key word: outsourcing ;)
[Corion]: marto: Yeah, feels like that ;) You could set up the cronjob that auto-creates tickets :-))

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (9)
As of 2017-01-24 10:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you watch meteor showers?




    Results (203 votes). Check out past polls.