You've already got an answer for a better way to do it (and I'll mention in passing that you should probably use unlink
instead of shelling out for rm
), but I'll answer the question you actually asked.
What's happening is that, because of the redirection, perl is spawning a shell, and passing the command line you specified to it. That's your 29309 process. That shell, then, sets up the stdin and stdout filehandles, and itself forks another process (the cat process, 29310). As far as how to fix it, there are almost certainly ways to parse the output of ps or do all sorts of crazy things, but the simplest answer is to just do the copying internally in perl. In fact, in that case instead of copying "for about a second", you can decide on exactly how much data you want to copy, and just use that.