php中启用多进程的实例详解(ubuntu系统)

发布时间:2019-12-01编辑:脚本学堂
本文介绍下,在ubuntu系统中,开启php的多进程的方法与实例。有需要的朋友参考下吧。

1,首先,在ubuntu系统中编译pcntl.so,如果找不到pcntl的包,可以创建一个文件夹,下载整个PHP包,在其中找到pcntl包。
然后运行命令:
 

复制代码 代码示例:
mkdir php
cd php
apt-get source php5
cd php5-(WHATEVER_RELEASE)/ext/pcntl
phpize
./configure
 

将编译好的pcntl.so复制到系统php的拓展文件夹下,具体位置看phpinfo中的说明。
例如:
 

复制代码 代码示例:
cp modules/pcntl.so /usr/lib/php5/WHEVER_YOUR_SO_FILES_ARE/
echo "extension=pcntl.so" > /etc/php5/conf.d/pcntl.ini

查看phpinfo信息,看是否已加载pcntl。

2,开始pcntl_fork
测试代码如下:
 

复制代码 代码示例:

<?php
/**
* php 多进程演示
* edit www.jb200.com
*/
    //while(1)//循环采用3个进程
    $bWaitFlag = FALSE; // 是否等待进程结束
    //$bWaitFlag = TRUE; // 是否等待进程结束
    $intNum = 3; // 进程总数
    $pids = array(); // 进程PID数组

    for($i = 0; $i <$intNum; $i++) {

    $pids[$i] = pcntl_fork();// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息
    if($pids[$i] == -1) {
    echo "couldn't fork". "n";
    }elseif(!$pids[$i]) {
    sleep(1);
    echo "n"."第".$i."个进程 -> " . time(). "n";
    //$url=" http://xxx/comments.php?p=".$i;//抓取页面的例子
    //$content = file_get_contents($url);
    //file_put_contents('message.txt',$content);
    //echo "n"."第".$i."个进程 -> " ."抓取页面".$i."-> " . time()."n";
    exit(0);//子进程要exit否则会进行递归多进程,父进程不要exit否则终止多进程
        }
        if ($bWaitFlag) {
            pcntl_waitpid($pids[$i], $status, WUNTRACED);echo "wait $i -> " . time() . "n";
        }
    }
?>

保存为fork.php,然后,在命令行运行:
# php fork.php。