in reply to fork()ing a large process

actually from your code it seems that the parent process will ALWAYS wait for the child process to exit before going to the next file. Your main while loop forks a child (load_file) and then waits for it to exit (reap_children) before going to the next iteration of the while loop.

Try this instead (untested)

use strict; # I'm hinting that this should be part of the (error chec +king you took out) my @pids; while (1) { # Loop other processing here. push(@pids,load_file($this_file)); } reap_children(@pids); sub load_file() { my $childProcess; $childProcess = fork(); unless($childProcess) { # Child process so lets exec the loader. exec("loader $this_file"); exit 0; } return $childProcess; } sub reap_children() { foreach(@_) { wait($_); } }
spawn all the children keeping tack of their pids as you spawn them...then just wait in turn for all the children to die at the end.

HTH

Update: I should post before being caffeinated...the waitpid shouldn't block as tye pointed out to me. So, I'm not quite sure where it's going wrong....maybe a solaris issue? I've used the above technique before and not had any problems...

/\/\averick
perl -l -e "eval pack('h*','072796e6470272f2c5f2c5166756279636b672');"

Replies are listed 'Best First'.
Re: Re: fork()ing a large process
by Jonathan (Curate) on Nov 29, 2001 at 22:23 UTC
    Thanks for the response maverick. I know waitpid shouldn't block which was why I included my OS and Perl build details. As for use strict, yes it and 1000 other lines were removed.