PCNTL--PHP進程控制擴展學習筆記

  PHP的進程控制支持實現(xiàn)了Unix方式的進程創(chuàng)建, 程序執(zhí)行, 信號處理以及進程的中斷。 進程控制不能被應用在Web服務器環(huán)境,當其被用于Web服務環(huán)境時可能會帶來意外的結(jié)果。

創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、涇縣網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5建站、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務,價格優(yōu)惠性價比高,為涇縣等各大城市提供網(wǎng)站開發(fā)制作服務。

  目前該擴展只能運行在*unix下,PCNTL現(xiàn)在使用了ticks作為信號處理的回調(diào)機制,ticks在速度上遠遠超過了之前的處理機制。 這個變化與“用戶ticks”遵循了相同的語義。您可以使用declare() 語句在程序中指定允許發(fā)生回調(diào)的位置。這使得我們對異步事件處理的開銷最小化。在編譯PHP時 啟用pcntl將始終承擔這種開銷,不論您的腳本中是否真正使用了pcntl。

  在學習PCNTL前,請確保PHP已經(jīng)安裝了該擴展:

[root@laiji ~]# php -m|grep pcntl
pcntl

  學習實例:

<?php
$pid=pcntl_fork();//在當前進程當前位置產(chǎn)生分支(子進程)
if($pid==-1){
  die('could not fork--lailaiji@163.com');//無法創(chuàng)建子進程
}elseif($pid){//當PID大于0時,進入父進程處理邏輯
  var_dump("parent");
  var_dump($status,'status');
}else{//當PID等于0時,進入子進程處理邏輯
  for($i=0;$i<50;$i++){
    echo $i.'-';
  }
  var_dump("child exit");
  exit();//最好加上這句,否則子進程還會往下走
}
//最后運行
echo "\n---------------\n";
for($j=0;$j<200;$j++){
  echo $j."+";
}

?>

  為什么會需要進行PID值的判斷呢?是因為在pcntl_fork()運行之后,fork是創(chuàng)建了一個子進程,父進程和子進程 都從fork的位置開始向下繼續(xù)執(zhí)行,不同的是父進程執(zhí)行過程中,得到的fork返回值為子進程 號,而子進程得到的是0。換句話說,就是產(chǎn)生子進程與父進程都會繼續(xù)執(zhí)行后面相同的代碼,因此需要區(qū)別當前運行的進程屬性。

  我們運行后發(fā)現(xiàn),先會進來執(zhí)行parent分支,但是對于哪個進程先結(jié)束卻是依賴于LINUX系統(tǒng)的進程運行過程,你可以為進程設(shè)置優(yōu)先級(pcntl_setpriority — 修改任意進程的優(yōu)先級)。常常我們父進程需要依賴子進程都運行完成后才能結(jié)束,因此在父進程需要等待子進程,使用的PCNTL函數(shù):pcntl_wait — 等待或返回fork的子進程狀態(tài)。

  父進程依賴子進程完成的代碼為:

<?php
$pid=pcntl_fork();
if($pid==-1){
  die('could not fork');
}elseif($pid){
  var_dump("parent");
  pcntl_wait($status);
  var_dump($status,'status');
}else{
  #pcntl_alarm(3);
  sleep(15);
  var_dump('chlid');
  for($i=0;$i<50;$i++){
    echo $i.'-';
  }
  var_dump("child exit");
  exit();
}
echo "\n---------------\n";
for($j=0;$j<200;$j++){
  echo $j."+";
}

?>

運行后,在父進程需要等待15秒后的子進程完成了,才會運行到最后一步。

分享文章:PCNTL--PHP進程控制擴展學習筆記
標題網(wǎng)址:http://bm7419.com/article46/gegghg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、動態(tài)網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)站排名、靜態(tài)網(wǎng)站、網(wǎng)站導航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化