8 /* we receive data. we find the next child in
9 line that is available. pass the data down that childs pipe and go
10 back to listening for more data.
11 when we receive SIGCHLD, we check for any dead children and clean up
12 their respective prefork_child objects, close pipes, etc.
14 we build a select fd_set with all the child pipes (going to the parent)
15 when a child is done processing a request, it writes a small chunk of
16 data to the parent to alert the parent that the child is again available
19 int osrf_prefork_run(const char* appname);