http://www.perlmonks.org?node_id=667731


in reply to Fork issues

Have a look at the Net::Server modules. They take care of the network and forking stuff for you. You only have to write a subroutine that the child will run.

I ran the posted code but replaced the e-mail function here comments with print "A\n" and print "B\n". I found both letters were printed to the same terminal the program was run from just as expected. This was the case both with and without the &. I am running Fedora 6. Your OS might behave differently.

Something else I noticed is the parent process in that code does not wait for the child to exit. The result is your system will accumulate zombie processes. Another option is before any forking code include $SIG{'CHLD'}="IGNORE";

Also running a process in the background (with the &) is not quite the same as daemonizing a process. See Unix Programming FAQ 1.7 : How do I get my program to act like a daemon? for a description of daemonizing.