fork
system call. Returns the child pid to the parent
process and 0 to the child process, or undef if the fork is unsuccessful. Note: unflushed buffers remain unflushed in
both processes, which means you may need to set $|
($AUTOFLUSH in English) or call the
autoflush
method of IO::Handle to avoid duplicate output.
If you fork
without ever waiting on your children, you will
accumulate zombies:
$SIG{CHLD} = sub { wait };
There's also the double-fork trick (error checking on fork
returns omitted);
unless ($pid = fork) { unless (fork) { exec "what you really wanna do"; die "no exec"; # ... or ... ## (some_perl_code_here) exit 0; } exit 0; } waitpid($pid,0);
See also the perlipc manpage for more examples of forking and reaping moribund children.
Note that if your forked child inherits system file descriptors like STDIN and STDOUT that are actually connected by a pipe or socket, even if you exit, the remote server (such as, say, httpd or rsh) won't think you're done. You should reopen those to /dev/null if it's any issue.