have you looked at threads? You can create the threads, then use is_running to check if they are alive. If you need to pass actual data, you can use the aforementioned shared data.
That will be okay for now, although the day will come when the client wants to upgrade to perl 5.10.whatever+ which no longer supports threads. So I will resort to that only if necessary. I already looked at the fork-based drop-in replacement of threads and all my issues here remain unresolved for that.