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