摘要:說明函數創建一個子進程,這個子進程僅進程號和父進程號與其父進程不同。返回值成功時,在父進程執行線程內返回產生的子進程的,在子進程執行線程內返回。失敗時,在父進程上下文返回,不會創建子進程,并且會引發一個錯誤。
pcntl 簡介
PHP的進程控制支持實現了Unix方式的進程創建, 程序執行, 信號處理以及進程的中斷。 進程控制不能被應用在Web服務器環境,當其被用于Web服務環境時可能會帶來意外的結果。
這份文檔用于闡述每個進程控制函數的通常用法。關于Unix進程控制的更多信息建議您查閱 系統文檔中關于fork(2),waitpid(2),signal(2)等的部分或更全面的參考資料比如 《Unix環境高級編程》(作者:W. Richard Stevens,Addison-Wesley出版)。
PCNTL現在使用了ticks作為信號處理的回調機制,ticks在速度上遠遠超過了之前的處理機制。 這個變化與“用戶ticks”遵循了相同的語義。您可以使用declare() 語句在程序中指定允許發生回調的位置。這使得我們對異步事件處理的開銷最小化。在編譯PHP時 啟用pcntl將始終承擔這種開銷,不論您的腳本中是否真正使用了pcntl。
有一個調整是PHP 4.3.0之前的所有pcntl腳本要使其工作,要么在期望允許回調的(代碼)部分使用 declare() ,要么使用declare()新的全局語法 使其在整個腳本范圍有效。
Note: 此擴展在 Windows 平臺上不可用。
官方文檔pcntl官方文檔
pcntl_fork# 來源官方 PHP 4 >= 4.1.0, PHP 5, PHP 7) pcntl_fork — 在當前進程當前位置產生分支(子進程)。譯注:fork是創建了一個子進程,父進程和子進程 都從fork的位置開始向下繼續執行,不同的是父進程執行過程中,得到的fork返回值為子進程 號,而子進程得到的是0。 說明 int pcntl_fork ( void ) pcntl_fork()函數創建一個子進程,這個子進程僅PID(進程號) 和PPID(父進程號)與其父進程不同。fork怎樣在您的系統工作的詳細信息請查閱您的系統 的fork(2)手冊。 返回值 成功時,在父進程執行線程內返回產生的子進程的PID,在子進程執行線程內返回0。失敗時,在 父進程上下文返回-1,不會創建子進程,并且會引發一個PHP錯誤。代碼
0, 如果fork成功,返回子進程id // 父進程邏輯 $time = microtime(true); echo "我是父進程:{$time}".NEWLINE; } else { // $pid = 0 // 子進程邏輯 $time = microtime(true); echo "我是子進程:{$time}".NEWLINE; }執行結果
當前進程:17472 我是父進程:1528697500.2961 我是子進程:1528697500.2961fork后會子進程先執行還是父進程先執行邏輯呢? 測試代碼
此處我們調換上面代碼的父子進程的if順序
if ($pid == -1) { // 創建錯誤,返回-1 die("進程fork失敗"); } else if (!$pid) { // $pid = 0 // 子進程邏輯 $time = microtime(true); echo "我是子進程:{$time}".NEWLINE; } else if ($pid) { // $pid > 0, 如果fork成功,返回子進程id // 父進程邏輯 $time = microtime(true); echo "我是父進程:{$time}".NEWLINE; }執行結果
當前進程:17472 我是父進程:1528697500.2961 我是子進程:1528697500.2961測試總結
fork首先會執行父進程邏輯再執行子進程邏輯
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28792.html
摘要:多進程消費模型父進程等待并控制子進程的退出思路整理父進程開啟后,直接獲取到子進程的,然后存入數組,子進程出來后直接開啟業務消費代碼,然后退出,然后父進程等待子進程退出,全部退出后父進程結束代碼請在模式下運行子進程的數量如果是資源類型的變量, 多進程消費模型 父進程等待并控制子進程的退出 思路整理 父進程開啟后,直接獲取到子進程的pid,然后存入child數組,子進程fork出來后直接開...
摘要:對編程的理解,應該到深入到操作系統級別。進程控制,我一直都沒有接觸,感覺好高端,今天啃了一下擴展的最簡單的兩個函數,有點心得,記錄一下吧,歡迎拋磚。 對編程的理解,應該到深入到操作系統級別。進程控制,我一直都沒有接觸,感覺好高端,今天啃了一下pcntl擴展的最簡單的兩個函數,有點心得,記錄一下吧,歡迎拋磚。新建代碼文件 pcntl_wait.php,如下: $i = 0; ...
摘要:目的綜上所述,我的目標就是實現基于模式實現的多進程管理工具。備注下文中,父進程統稱為子進程統稱為。最后我們通過下圖來簡單的總結和描述這個多進程實現的過程控制上面實現了多進程和多進程的常駐內存,那如何去管理呢答案多進程通信。 _ | | _ __ __ _ _ __...
摘要:因為子進程一定不會是組長進程,所以子進程可以調用。主進程退出子進程繼續執行啦啦啦,啦啦啦,啦啦啦,已經變成啦,開心一般服務器軟件都有寫配置項,比如以模式運行還是以模式運行。 [原文地址:https://blog.ti-node.com/blog...] 其實前面是談過一次daemon進程的,但是并涉及過多原理,但是并不影響使用。今天打算說說關于daemon進程更多的二三事,本質上說,如...
摘要:后面每開啟一個子進程,會將子進程的存儲到中,用來后面主進程監控子進程,如果子進程意外終止,主進程可以重新佛。將當前子進程設置為會話組再次創建子進程,為了防止在的系統下重新打開控制終端。 wokerman 啟動分析 @(學習)[workerman, php] 前期想說的 也是最近才看的代碼,遇到不懂得地方就去google,所以這篇文章里面穿插了很多參考資料,可以直接點擊閱覽。 需要了解一...
閱讀 3245·2023-04-26 01:31
閱讀 1892·2023-04-25 22:08
閱讀 3430·2021-09-01 11:42
閱讀 2823·2019-08-30 12:58
閱讀 2165·2019-08-29 18:31
閱讀 2429·2019-08-29 17:18
閱讀 3064·2019-08-29 13:01
閱讀 2552·2019-08-28 18:22