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)