pcntl在windows下无法使用,linux编译php时加上参数--enable-pcntl 即可。第一次使用pcntl模块,遇到了一些坑也慢慢填上了,这里简单记录下。
1. 子进程之间变量无法共享。
2. 子进程完成,记得加上exit(),子进程退出,否则会有坑。
1 <?php 2 $pid_dir = __DIR__.'/pid_files/'; 3 4 5 for ($i=0;$i<3;$i++){ 6 $pid = pcntl_fork(); 7 if ($pid == -1){ 8 var_dump('fork failed'); 9 } 10 11 if ($pid == 0){ 12 //子进程代码 ,返回当前进程id 13 $pid = posix_getgid(); 14 //返回当前父进程标识 15 $ppid = posix_getppid(); 16 $r = rand(0,100); //随机数 17 //创建一个文件 18 //file_put_contents($pid_dir."fork_child_process_{$i}_{$ppid}_{$pid}_{$r}",$e); 19 touch($pid_dir."fork_child_process_{$i}_{$ppid}_{$pid}_{$r}"); 20 //注意这里子进程完成,记得加上exit(),子进程退出,否则会有坑 22 exit(); 23 } 24 } 25 26 27 $pid = posix_getpid(); 28 $ppid = posix_getppid(); 29 $r = rand(0,100); //随机数 30 touch("$pid_dir/fork_process_pid_{$ppid}_{$pid}_$r"); 31 32 33 sleep(1000); // ps aux | grep php
参考: https://segmentfault.com/a/1190000003503671