Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: what is this doing? - while (wait() != -1)

by lestrrat (Deacon)
on Feb 14, 2002 at 18:08 UTC ( [id://145521]=note: print w/replies, xml ) Need Help??


in reply to what is this doing? - while (wait() != -1)

wait/waitpid returns -1 when there are no children or the children are automatically being reaped ( according to perldoc -f wait ). So the loop is waiting for all of the children to exit

I personally don't like this child count decrementing business... I'd rather explicitly check if the pid that I just got is the pid that I'm waiting for, i.e., my child. That may just be me...

## XXX - I use hashes in this type of situation ## because I usually associate more meta data to a pid ## which must be used by the parent when the child ## exits... and delete $hash{ $foo } is cleaner ## than splice() to me :) use POSIX; my %pids; for( 1 .. $numchild ) { my $pid = fork(); ## check if $pid id defined, etc. if( $pid ) { ## parent $pids{ $pid } = 1; } else { do_interesting_stuff(); exit; } } while( ( my $pid = waitpid(-1, POSIX::WNOHANG() ) ) > 0 ){ if( exists $pids{ $pid } ) { delete $pids{ $pid }; } else { print STDERR "Unknown child $pid\n"; } }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://145521]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (None)
    As of 2024-04-25 01:05 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      No recent polls found