Reputation: 3804
I have spend hours, days, weeks trying to understand how PHP pcntl really works and still dont know exactly what is really happening.
Why parents and childs ? I am using Debian (am far for being an expert in computers I must admit) but all I want to do is receive a message from my webSocket client (which I have already managed to do) and keep listening other users.
In other words, if I receive a message and use a sleep(5);
then the server will not listen any other messages until this piece of code is finished.
Note that the sleep(5)
is for test purposes. I plan to process hundreds of messages simultaneously and thats why am trying to figure out how could pcntl
be helpfull.
$pid = pcntl_fork();
echo "start\n";
if($pid) {
// parent process runs what is here
echo "parent\n";
}
else {
// child process runs what is here
echo "child\n";
}
echo "end\n";
What exactly is happening behind the above script ? Why am I getting this result ?
start
parent
end
start
child
end
Could someone please explain me what is the computer "thinking" ?
Upvotes: 0
Views: 772
Reputation: 173542
This is basically what happens:
pcntl_fork()
||
+----------------++------------------+
parent child
"start" ...
"parent" ...
"end" ...
"start"
"child"
"end"
Any code after pcntl_fork()
gets executed by both parent and child process; you can think of the child as a clone of the parent, except that the outcome of pcntl_fork()
is 0
; it's like the code enters a different reality, not unlike Back to the future ;-)
This is just one of the possible outcomes, though; depending on cpu usage, the child's "start" may occur together with the parent's "parent" output.
Upvotes: 4