It's been a while since I worked with raw forking instead of a helper module, but as far as I can tell, your process isn't actually backgrounding itself nor waiting on its children. If you want to implement this yourself, I suggest a thorough read of perlipc.
For doing parallel processing, Parallel::ForkManager is something I see recommended often.
At the moment, I mostly use Daemon::Control for my daemons, and a while back I also used Daemon::Daemonize. See also the FAQ How do I fork a daemon process?, which recommends Proc::Daemon. Alternatively, although I unfortunately haven't yet had a chance to try it out, fellow monk afoken often recommends daemontools.