I would suggest you look at
perlipc.
If you use certain forms of
open,
you can accomplish one or two of your tasks
(fork or fork and exec), as well as get
the pid of the child back. This might make
monitoring easier as well, depending on how
you are going about that (checking the
stdout), if not then consider opening and
dupping a filehandle for STDIN before
you open your child.