In some cases (starting server processes, for instance) you'll want to complete dissociate the child process from the parent. The easiest way is to use:
use POSIX qw(setsid); setsid() or die "Can't start a new session: $!";
However, you may not be on POSIX. The following process is reported to work on most Unixish systems. Non-Unix users should check their Your_OS::Process module for other solutions.
Open /dev/tty and use the TIOCNOTTY ioctl on it. See tty(4) for details.
Change directory to /
Reopen STDIN, STDOUT, and STDERR so they're not connected to the old tty.
Background yourself like this:
fork && exit;
Ignore hangup signals in case you're running on a shell that doesn't automatically no-hup you:
$SIG{HUP} = 'IGNORE'; # or whatever you'd like
Back to Background Processes
Forward to Safe Pipe Opens
Up to the perlipc manpage