PHP基于進(jìn)程控制函數(shù)實(shí)現(xiàn)多線程
php有一組進(jìn)程控制函數(shù)(編譯時(shí)需要?enable-pcntl與posix擴(kuò)展),使得php能在nginx系統(tǒng)中實(shí)現(xiàn)跟c一樣的創(chuàng)建子進(jìn)程、使用exec函數(shù)執(zhí)行程序、處理信號(hào)等功能。
CentOS 6 下yum安裝php的,默認(rèn)是不安裝pcntl的,因此需要單獨(dú)編譯安裝,首先下載對(duì)應(yīng)版本的php,解壓后
cd php-version/ext/pcntl phpize ./configure && make && make install cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so echo 'extension=pcntl.so' >> /etc/php.ini /etc/init.d/httpd restart
方便極了。
下面是示例代碼:
<?php header(’content-type:text/html;charset=utf-8’ ); // 必須加載擴(kuò)展 if (!function_exists('pcntl_fork')) { die('pcntl extention is must !'); } //總進(jìn)程的數(shù)量 $totals = 3; // 執(zhí)行的腳本數(shù)量 $cmdArr = array(); // 執(zhí)行的腳本數(shù)量的數(shù)組 for ($i = 0; $i < $totals; $i++) { $cmdArr[] = array('path' => __DIR__ . '/run.php', ’pid’ =>$i ,’total’ =>$totals); } /* 展開(kāi):$cmdArr Array ( [0] => Array ( [path] => /var/www/html/company/pcntl/run.php [pid] => 0 [total] => 3 ) [1] => Array ( [path] => /var/www/html/company/pcntl/run.php [pid] => 1 [total] => 3 ) [2] => Array ( [path] => /var/www/html/company/pcntl/run.php [pid] => 2 [total] => 3 ) ) */ pcntl_signal(SIGCHLD, SIG_IGN); //如果父進(jìn)程不關(guān)心子進(jìn)程什么時(shí)候結(jié)束,子進(jìn)程結(jié)束后,內(nèi)核會(huì)回收。 foreach ($cmdArr as $cmd) { $pid = pcntl_fork(); //創(chuàng)建子進(jìn)程 //父進(jìn)程和子進(jìn)程都會(huì)執(zhí)行下面代碼 if ($pid == -1) { //錯(cuò)誤處理:創(chuàng)建子進(jìn)程失敗時(shí)返回-1. die(’could not fork’); } else if ($pid) { //父進(jìn)程會(huì)得到子進(jìn)程號(hào),所以這里是父進(jìn)程執(zhí)行的邏輯 //如果不需要阻塞進(jìn)程,而又想得到子進(jìn)程的退出狀態(tài),則可以注釋掉pcntl_wait($status)語(yǔ)句,或?qū)懗桑? pcntl_wait($status,WNOHANG); //等待子進(jìn)程中斷,防止子進(jìn)程成為僵尸進(jìn)程。 } else { //子進(jìn)程得到的$pid為0, 所以這里是子進(jìn)程執(zhí)行的邏輯。 $path = $cmd['path']; $pid = $cmd[’pid’] ; $total = $cmd[’total’] ; echo exec('/usr/bin/php {$path} {$pid} {$total}').'n'; exit(0) ; } } ?>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. jsp文件下載功能實(shí)現(xiàn)代碼2. CSS可以做的幾個(gè)令你嘆為觀止的實(shí)例分享3. XML入門的常見(jiàn)問(wèn)題(二)4. JSP之表單提交get和post的區(qū)別詳解及實(shí)例5. 讀大數(shù)據(jù)量的XML文件的讀取問(wèn)題6. ASP實(shí)現(xiàn)加法驗(yàn)證碼7. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案8. asp知識(shí)整理筆記4(問(wèn)答模式)9. javascript xml xsl取值及數(shù)據(jù)修改第1/2頁(yè)10. 概述IE和SQL2k開(kāi)發(fā)一個(gè)XML聊天程序
