Linux kernels by default are maxed at 512 processes, and half of that is the per-userid limit. There's a define you can tweak in /usr/src/linux/include/linux somewhere NR_TASKS I believe. You can crank it up to 4000 or so in the 2.0.x series.
I've looked at the code for select in the kernel, and EFAULT should only occur if you pass it a bogus pointer ... which we'd have a hard time doing considering we're passing it a statically allocated thing. When I get a chance I'll try a heavy load with lots of CGIs just for kicks and see what happens. Dean