PHP有个pcntl_fork的函数可以实现多进程,但要加载pcntl拓展,而且只有在linux下才能编译这个拓展,有时间在ubuntu下玩了下。

    1.首先在ubuntu下编译pcntl.so,我的ubuntu下找不到pcntl的包,于是

创建一个文件夹下载了整个PHP包,在里面找到了pcntl包运行如下命令

# mkdir php
# cd php
# apt-get source php5
# cd php5-(WHATEVER_RELEASE)/ext/pcntl
# phpize
# ./configure (注一)
# make
# make install 

phpize 命令是用来准备 PHP 外挂模块的编译环境的。 

 

成功的安装将建立 extname.so 并放置于 PHP 的外挂模块目录中 (预设存放于 /usr/lib/php/modules/ 内) 。
需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此外挂模块。 

 

    2,开始实验pcntl_fork

01 <?php
02 //while(1)//循环采用3个进程
03 //{
04 //declare(ticks=1);
05 $bWaitFlag = FALSE; // 是否等待进程结束
06 //$bWaitFlag = TRUE; // 是否等待进程结束
07 $intNum = 3; // 进程总数
08 $pids = array(); // 进程PID数组
09 for($i = 0; $i <$intNum; $i++)
10 {$pids[$i] = pcntl_fork();// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息
11 /*if($pids[$i])//父进程
12 {
13 //echo $pids[$i]."parent"."$i -> " . time(). "\n";
14 }
15 */
16 if($pids[$i] == -1)
17 {
18 echo "couldn't fork". "\n";
19 }
20 elseif(!$pids[$i])
21 {
22 sleep(1);
23 echo "\n"."第".$i."个进程 -> " . time(). "\n";
24 //$url=" http://xxx/comments.php?p=".$i;//抓取页面的例子
25 //$content = file_get_contents($url);
26 //file_put_contents('message.txt',$content);
27 //echo "\n"."第".$i."个进程 -> " ."抓取页面".$i."-> " . time()."\n";
28 exit(0);//子进程要exit否则会进行递归多进程,父进程不要exit否则终止多进程
29 }
30 if ($bWaitFlag)
31 {
32 pcntl_waitpid($pids[$i], $status, WUNTRACED);echo "wait $i -> " . time() ."\n";}}
33 //sleep(1);
34 //}
35 ?>

相关文章:

  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2021-09-20
  • 2022-12-23
  • 2022-12-23
  • 2021-09-28
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-24
  • 2021-09-19
  • 2022-12-23
  • 2022-12-23
  • 2021-09-28
相关资源
相似解决方案