in reply to gzip command always returns -1

If you want a bunch of gzip jobs to run simultaneously in the background, and you're using a unix system anyway, this seems like a simple enough case for just using the shell:
#!/bin/sh for i in msg.[1-9] msg.10; do gzip $i && echo $i finished & done
Doing that sort of process control in perl just seems a tad more complicated than it needs to be.

On a separate note, assuming you're always doing file sets that are on the same disk (and maybe even if they're not), there will be some number of concurrent jobs -- possibly less than ten -- at which available system resources will be swamped, and adding more jobs beyond that point will not really get things done any quicker -- they'll just spend more time waiting to be serviced.

If you plan to be doing this sort of thing on a regular basis, it may be worth your while to do some benchmarks and find out what the practical limit is on the number of concurrent jobs. (You might also need to consider the impact of your jobs on other activities: e.g., might there be other users or processes trying to access the same disk while you're swamping it with i/o?)