in reply to is sharing variables between forked process possible??

You can share the variables between forked process by using the function "vfork"

Regards,
S.Venni Rajan.
"A Flair For Excellence."
                 BK Systems.

Replies are listed 'Best First'.
Re^2: is sharing variables between forked process possible??
by earlati2 (Beadle) on Feb 17, 2006 at 09:17 UTC

    another way is to use shared memory to have same value visible from each parent and childs process.

    this is an example:

    
    $ipckey = IPC_PRIVATE; 
    $idshm = shmget( $ipckey, 200, 0666 ) || die "\nCreation shared memory failed $! \n";
    
    $statusproc = "00000";
    shmwrite( $idshm, $statusproc , 0, 100 ) || die "shmwrite $!";
    
    if ( $pid == 0 )
    {
           # do what I  have to do .............
          # end of task
           $statusproc = "1";
           shmwrite( $idshm, $statusproc , 0, 1 ) || warn "\n\n shmwrite $! \n";
    }
    else
    {
        ................
             # check statusproc  from time to time 
            shmread( $idshm, $statusproc , 0, 1 ) || warn "\n\n shmread $! \n";
             if(  $statusproc  eq "1" )  # the child has ended it's task
    
    
      If you are going to use this method, be sure to check for any left over memory segments when done, with ipcs (on linux). These segments are not automatically cleaned up, although some modules may do it for you. To me, it's one of the drawbacks of this form of IPC, especially if your program gets killed before it can clean up, you may have a "zombie-like" shared memory segment (possibly with 777 permissions) floating around in your ram. See forking with Storable and IPC::ShareLite for example.

      I'm not really a human, but I play one on earth. flash japh
Re^2: is sharing variables between forked process possible??
by salva (Canon) on Feb 17, 2006 at 09:27 UTC
    How? vfork is not available from perl.

    And anyway, the manual page for the syscall (on Linux) says:

    The vfork() function has the same effect as fork(), except that the behaviour is undefined if the process created by vfork() either modifies any data other than a variable of type pid_t used to store the return value from vfork(), or returns from the function in which vfork() was called, or calls any other function before successfully calling _exit() or one of the exec() family of functions.

    It doesn't look like a good option!!!

      Not entirely true. You can configure your Perl to use the system vfork() instead of the system fork(). This, however, is not recommended and can lead to unexpected breakages.

Re^2: is sharing variables between forked process possible??
by zentara (Cardinal) on Feb 17, 2006 at 13:17 UTC
    What and where is this "vfork" in Perl?

    I'm not really a human, but I play one on earth. flash japh