摘要:一中函數(shù)概述函數(shù)是中用于創(chuàng)建子進程的一個函數(shù),返回創(chuàng)建的子進程的。主進程進行業(yè)務(wù)分發(fā)操作,子進程進行具體的業(yè)務(wù)邏輯執(zhí)行。
一、php中pcntl_fork函數(shù)概述
pcntl_fork()函數(shù)是php中用于創(chuàng)建子進程的一個函數(shù),返回創(chuàng)建的子進程的pid。
該函數(shù)創(chuàng)建子進程具體fork的過程:
(1)調(diào)用該函數(shù)即創(chuàng)建一個子進程,創(chuàng)建成功父進程返回子進程的pid,子進程返回0; (2)創(chuàng)建子進程實際上對父進程的一個拷貝,共享代碼空間,拷貝父進程的數(shù)據(jù),也就是說父進程改變父進程的數(shù)據(jù),子進程改變子進程的數(shù)據(jù)變量等;二、示例代碼分析
代碼示例:
0){ //父進程fork成功返回子進程的id,此為父進程的執(zhí)行邏輯 echo "子進程id:".$son_pid.PHP_EOL; }elseif($son_pid = 0){ //子進程fork后返回的pid是0,因此為子進程執(zhí)行邏輯 }else{ //$son_pid=-1的時候,代表fork子進程失敗 }
以上代碼執(zhí)行后結(jié)果為:
示例代碼分析:
(1)發(fā)現(xiàn)創(chuàng)建了子進程之后,系統(tǒng)會切換到子進程中,而子進程中的代碼是從含有pcntl_fork函數(shù)的那行執(zhí)行的 (2)創(chuàng)建子進程之后,子進程的代碼段是拷貝pcntl_fork函數(shù)及之后的代碼段,之前的代碼段并不拷貝,但是具體的數(shù)據(jù)變量子進程仍然會拷貝 (3)可見,fork之后程序會分叉執(zhí)行,即子進程執(zhí)行三、pcntl_fork的業(yè)務(wù)場景舉例
php的多進程中,常用pcntl_fork來實現(xiàn)并發(fā),多用于一些簡單工具的實現(xiàn)。
例如監(jiān)控工具,想要監(jiān)控幾個不同指標(biāo)的情形,可以使用主進程監(jiān)控各指標(biāo)的配置變化,然后對每個指標(biāo)分別fork一個子進程來監(jiān)控其具體的情形,當(dāng)主進程發(fā)現(xiàn)指標(biāo)的配置改變則kill掉之前的子進程重新創(chuàng)建子進程進行監(jiān)控。
主進程進行業(yè)務(wù)分發(fā)操作,子進程進行具體的業(yè)務(wù)邏輯執(zhí)行。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31006.html
摘要:說明函數(shù)創(chuàng)建一個子進程,這個子進程僅進程號和父進程號與其父進程不同。返回值成功時,在父進程執(zhí)行線程內(nèi)返回產(chǎn)生的子進程的,在子進程執(zhí)行線程內(nèi)返回。失敗時,在父進程上下文返回,不會創(chuàng)建子進程,并且會引發(fā)一個錯誤。 pcntl 簡介 PHP的進程控制支持實現(xiàn)了Unix方式的進程創(chuàng)建, 程序執(zhí)行, 信號處理以及進程的中斷。 進程控制不能被應(yīng)用在Web服務(wù)器環(huán)境,當(dāng)其被用于Web服務(wù)環(huán)境時可能會...
摘要:守護進程常常在系統(tǒng)引導(dǎo)裝入時啟動,在系統(tǒng)關(guān)閉時終止。進程組有進程組來唯一標(biāo)識。且該進程組不會因組長進程的退出而受到影響。 使用函數(shù) pcntl_fork();//創(chuàng)建子進程 posix_setsid();//設(shè)置當(dāng)前進程為進程組長 posix_getpid();//獲取進程id 例子 workerman中將進程 /** * Run as deamon mode. * * @th...
摘要:什么是守護進程守護進程是一種特殊的進程,它的生命周期很長,它在后臺運行并且沒有控制終端這樣可以保證守護進程不會接收到各種來自終端的信號。比如等,都會使用守護進程的形式運行,確保可以一直正常的提供服務(wù)。 什么是守護進程 守護進程(daemon)是一種特殊的進程,它的生命周期很長,它在后臺運行并且沒有控制終端(這樣可以保證守護進程不會接收到各種來自終端的信號)。比如:crontab、ssh...
摘要:用于創(chuàng)建子進程。該函數(shù)阻塞當(dāng)前進程,只到當(dāng)前進程的一個子進程退出或者收到一個結(jié)束當(dāng)前進程的信號。注意處需要注意子進程需要防止子進程也進入循環(huán)。如果沒有,最終創(chuàng)建的子進程不只個。 本系列文章將向大家講解pcntl_*系列函數(shù),從而更深入的理解進程相關(guān)知識。 PCNTL在PHP中進程控制支持默認(rèn)是關(guān)閉的。您需要使用 --enable-pcntl 配置選項重新編譯PHP的 CGI或CLI版本...
閱讀 3823·2021-11-24 09:39
閱讀 1827·2021-11-02 14:41
閱讀 829·2019-08-30 15:53
閱讀 3490·2019-08-29 12:43
閱讀 1204·2019-08-29 12:31
閱讀 3097·2019-08-26 13:50
閱讀 804·2019-08-26 13:45
閱讀 996·2019-08-26 10:56