该函数建立子进程具体fork的过程:php
(1)调用该函数即建立一个子进程,建立成功父进程返回子进程的pid,子进程返回0; (2)建立子进程实际上对父进程的一个拷贝,共享代码空间,拷贝父进程的数据,也就是说父进程改变父进程的数据,子进程改变子进程的数据变量等;
代码示例:并发
<?php $curr_pid = posix_getpid();//获取当前的进程id //将当前进程的id写入文件中 echo '当前进程:'.$curr_pid.PHP_EOL; //开始建立子进程 $son_pid = pcntl_fork();//返回子进程的id //查看当前进程 echo '建立子进程以后当前的进程为:'.posix_getpid().PHP_EOL; //建立了子进程以后 if($son_pid > 0){ //父进程fork成功返回子进程的id,此为父进程的执行逻辑 echo '子进程id:'.$son_pid.PHP_EOL; }elseif($son_pid = 0){ //子进程fork后返回的pid是0,所以为子进程执行逻辑 }else{ //$son_pid=-1的时候,表明fork子进程失败 }
示例代码分析:函数
(1)发现建立了子进程以后,系统会切换到子进程中,而子进程中的代码是从含有pcntl_fork函数的那行执行的 (2)建立子进程以后,子进程的代码段是拷贝pcntl_fork函数及以后的代码段,以前的代码段并不拷贝,可是具体的数据变量子进程仍然会拷贝 (3)可见,fork以后程序会分叉执行,即子进程执行