in reply to Re: Forking problem UPDATED
in thread Forking problem UPDATED

How are you submitting these jobs?

-M

Free your mind

Replies are listed 'Best First'.
Re^3: Forking problem UPDATED
by avi_learns_perl (Novice) on Mar 06, 2007 at 14:05 UTC
    Is there a way i can set variables in the forked process which will be updated into the parent process once the fork job is completed?

      Is there a way i can set variables in the forked process which will be updated into the parent process once the fork job is completed?

      You can open a pipe to a forked process and read what it has to say.

      my $child_pid = open my $child_fh, '-|'; if ( ! defined $child_pid ) { die "Can't fork: $!"; } if ( $child_pid ) { # parent my $child_says = do{ local $/; <$child_fh> }; close $child_fh; } else { # child # ... process your heart out ... print "my result"; }

      If you want to pass back something fancy, use Data::Dumper or YAML or the serialization of your choice.

      Since you're talking about spawning several children that finish at different times, you'll also want to look at IO::Select so you know when one of them has something to say.

      Come to think of it, it might be far simpler just to write a file that the parent picks up when the child is done. That's if you don't mind having temp files.

      More generally, have a look at perlipc for all your interprocess communications needs.

Re^3: Forking problem UPDATED
by avi_learns_perl (Novice) on Mar 06, 2007 at 13:33 UTC
    im using the system command to do that....
      It still depends what you are doing with the system command. For example, if the system command submits a job which is automatically distributed to the cluster, then you need to expand the command to detach itself from the parent, e.g. nohup command > logfile 2>&1 &

      But if the system command fails to distribute to the cluster then go back to my original suggestion for initing a cluster process instead of using the system command.

      -M

      Free your mind