in reply to Forked off!

Fork creates and runs a new instance of your program, just like if you ran it, except that the second program is a carbon copy of the first, at the point the fork occurs.

The program forks at the $pid=fork and suddenly there are two programs running, both doing the next statement (the if). The only difference is that one will have $pid = 0 and one will have $pid = 1234 or some number, being the pid of the child.

my $pid; $pid = fork; if ( $pid ) { #We are the parent print "Successfully forked, I am the parent\n"; } else { if ( $pid == 0 ) { #We are the child print "Successfully forked, I am the child\n"; } else { #undef value - no fork happened print "Fork failed for some strange reason\n"; } }

I'm currently writing a module to do this and handle IPC as well. If you can hold on a few days I'll clean up the module and post it.

____________________
Jeremy
I didn't believe in evil until I dated it.

Replies are listed 'Best First'.
Re: Re: Forked off!
by larryk (Friar) on Aug 06, 2001 at 20:38 UTC
    I am interested to see your module when you finish it. Can you let me know when it's done? Also, if I fork inside a block, does fork only dup-up code to the end of the block?
       larryk                                          
    perl -le "s,,reverse killer,e,y,rifle,lycra,,print"
      Yes, I'll be sure to let you know (I'll be sure to let everyone know).

      And nope, fork duplicates the entire program. It's heavily optimised, so it doesn't copy to whole program immediately, but you efectively have two separate programs that can go their own separate ways.

      ____________________
      Jeremy
      I didn't believe in evil until I dated it.