濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > PHP基于進(jìn)程控制函數(shù)實(shí)現(xiàn)多線程

PHP基于進(jìn)程控制函數(shù)實(shí)現(xiàn)多線程

熱門標(biāo)簽:電銷機(jī)器人便宜的有嗎 gps 地圖標(biāo)注軟件 ai電話機(jī)器人加盟代理 OMG地圖標(biāo)注app 招標(biāo)自動(dòng)語(yǔ)音外呼系統(tǒng) 400電話鄭州申請(qǐng) 中原區(qū)電話機(jī)器人價(jià)格 黔江400電話如何辦理 地圖標(biāo)注視頻廣告入駐

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); 
} 
 
/* 
展開:$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í)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 淺談并發(fā)處理PHP進(jìn)程間通信之外部介質(zhì)
  • PHP如何限制定時(shí)任務(wù)的進(jìn)程數(shù)量
  • 一文看懂PHP進(jìn)程管理器php-fpm
  • php 的多進(jìn)程操作實(shí)踐案例分析
  • php 多進(jìn)程編程父進(jìn)程的阻塞與非阻塞實(shí)例分析
  • php實(shí)現(xiàn)的簡(jiǎn)單多進(jìn)程服務(wù)器類完整示例
  • PHP 進(jìn)程池與輪詢調(diào)度算法實(shí)現(xiàn)多任務(wù)的示例代碼
  • php進(jìn)程(線程)通信基礎(chǔ)之System V共享內(nèi)存簡(jiǎn)單實(shí)例分析
  • 淺談并發(fā)處理PHP進(jìn)程間通信之System V IPC

標(biāo)簽:那曲 阿里 孝感 日照 池州 濟(jì)源 北京 哈密

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP基于進(jìn)程控制函數(shù)實(shí)現(xiàn)多線程》,本文關(guān)鍵詞  PHP,基于,進(jìn)程,控制,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP基于進(jìn)程控制函數(shù)實(shí)現(xiàn)多線程》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP基于進(jìn)程控制函數(shù)實(shí)現(xiàn)多線程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    乐山市| 宁乡县| 宝山区| 彭山县| 松原市| 临潭县| 鄂伦春自治旗| 丹寨县| 九龙城区| 古交市| 寻乌县| 阳高县| 津市市| 克什克腾旗| 浦城县| 建昌县| 金乡县| 望奎县| 藁城市| 五河县| 卫辉市| 工布江达县| 信阳市| 项城市| 沂南县| 台安县| 山东省| 顺义区| 湘阴县| 札达县| 江阴市| 育儿| 汝城县| 宁城县| 铅山县| 清流县| 公主岭市| 永清县| 定襄县| 稷山县| 余干县|