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

  

posted on 2016-07-07 17:56  睡着的糖葫芦  阅读(819)  评论(0编辑  收藏  举报