The shell doesn't do any writing here. It merely redirects
STDOUT to point to the file and then fork/execs the
new process. Backticks won't
do anything more than system() here either -- it won't ensure you
get all of the output. If the system'd process forks itself
into the background, backticks (like system) will return
immediately and stop grabbing output at that point.
You need to find out which process is not waiting (lwp-request?)
and either stop it from doing that or reimplement that part
only in perl. (gbarr's suggestion to check for '&' is
a good start.)
bluto