Someone gave name the answer over at:
StackOverflow User: mob
In general you must detach the child process from its parent to allow the parent to exit cleanly -- otherwise the parent can't assume that it won't need to handle more input/output.
} elsif ($pid == 0) {
close STDIN;
close STDERR;
close STDOUT; # or redirect
do_long_running_task();
exit;
In your example, the child process is making print statements until it exits. Where do those prints go if the parent process has been killed and closed its I/O handles?