PHP’s pcntl_fork function is supposed to fork a process just as the standard fork function in C.
But I was wondering if this function really forks the process or if it emulates that behavior in a different way.
If it really forks the process then it’s clear which process that is: one of Apache’s child processes.
That’s OK as long as Apache is using the prefork MPM (i.e. one process per request).
But what does happen if Apache is using the worker MPM??
When the worker MPM is being used, every Apache child process contains many threads, each one handling a different HTTP request. So if you would fork the process under that situation I can’t even think what would happend to all those threads and requests being served.
So if pcntl_fork() really forks the process then I think it’s not a good idea to use this function if you set Apache to use the worker MPM.
What do the experts say? Am I reasoning well, or I’m just speaking nonsense?
pcntl_forkprobably works as you think it would : it forks the current process, the same way the C function fork does :But, quoting the Introduction of the Process Control section of the manual :
So, you should not actually use that function from a PHP script executed via Apache : it should only be used when your PHP script is executed from the command-line.
And, before starting to use that function, don’t forget that :