in reply to Forking problem UPDATED

@ above responders.... This thing needs to work in a grid environment....a cluster of clusters...so basically i am just doing job submission to the grid...my problem comes in making sure all three run paralelly and one doesnt wait for the other to complete

Replies are listed 'Best First'.
Re^2: Forking problem UPDATED
by Moron (Curate) on Mar 06, 2007 at 13:19 UTC
    How are you submitting these jobs?

    -M

    Free your mind

      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.

      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