亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP的pcntl進(jìn)程控制教程一(pcntl_fork)

LeexMuller / 606人閱讀

摘要:說明函數(shù)創(chuàng)建一個子進(jìn)程,這個子進(jìn)程僅進(jìn)程號和父進(jìn)程號與其父進(jìn)程不同。返回值成功時,在父進(jìn)程執(zhí)行線程內(nèi)返回產(chǎn)生的子進(jìn)程的,在子進(jìn)程執(zhí)行線程內(nèi)返回。失敗時,在父進(jìn)程上下文返回,不會創(chuàng)建子進(jìn)程,并且會引發(fā)一個錯誤。

pcntl 簡介

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

這份文檔用于闡述每個進(jìn)程控制函數(shù)的通常用法。關(guān)于Unix進(jìn)程控制的更多信息建議您查閱 系統(tǒng)文檔中關(guān)于fork(2),waitpid(2),signal(2)等的部分或更全面的參考資料比如 《Unix環(huán)境高級編程》(作者:W. Richard Stevens,Addison-Wesley出版)。

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

有一個調(diào)整是PHP 4.3.0之前的所有pcntl腳本要使其工作,要么在期望允許回調(diào)的(代碼)部分使用 declare() ,要么使用declare()新的全局語法 使其在整個腳本范圍有效。

Note: 此擴(kuò)展在 Windows 平臺上不可用。

官方文檔

pcntl官方文檔

pcntl_fork
# 來源官方

PHP 4 >= 4.1.0, PHP 5, PHP 7)

pcntl_fork — 在當(dāng)前進(jìn)程當(dāng)前位置產(chǎn)生分支(子進(jìn)程)。譯注:fork是創(chuàng)建了一個子進(jìn)程,父進(jìn)程和子進(jìn)程 都從fork的位置開始向下繼續(xù)執(zhí)行,不同的是父進(jìn)程執(zhí)行過程中,得到的fork返回值為子進(jìn)程 號,而子進(jìn)程得到的是0。

說明
int pcntl_fork ( void )
pcntl_fork()函數(shù)創(chuàng)建一個子進(jìn)程,這個子進(jìn)程僅PID(進(jìn)程號) 和PPID(父進(jìn)程號)與其父進(jìn)程不同。fork怎樣在您的系統(tǒng)工作的詳細(xì)信息請查閱您的系統(tǒng) 的fork(2)手冊。

返回值
成功時,在父進(jìn)程執(zhí)行線程內(nèi)返回產(chǎn)生的子進(jìn)程的PID,在子進(jìn)程執(zhí)行線程內(nèi)返回0。失敗時,在 父進(jìn)程上下文返回-1,不會創(chuàng)建子進(jìn)程,并且會引發(fā)一個PHP錯誤。
代碼
 0, 如果fork成功,返回子進(jìn)程id

    // 父進(jìn)程邏輯
    $time = microtime(true);
    echo "我是父進(jìn)程:{$time}".NEWLINE;

} else { // $pid = 0

    // 子進(jìn)程邏輯
    $time = microtime(true);
    echo "我是子進(jìn)程:{$time}".NEWLINE;
}
執(zhí)行結(jié)果
當(dāng)前進(jìn)程:17472

我是父進(jìn)程:1528697500.2961

我是子進(jìn)程:1528697500.2961
fork后會子進(jìn)程先執(zhí)行還是父進(jìn)程先執(zhí)行邏輯呢? 測試代碼
此處我們調(diào)換上面代碼的父子進(jìn)程的if順序
if ($pid == -1) { // 創(chuàng)建錯誤,返回-1

    die("進(jìn)程fork失敗");

} else if (!$pid) { // $pid = 0

    // 子進(jìn)程邏輯
    $time = microtime(true);
    echo "我是子進(jìn)程:{$time}".NEWLINE;
} else if ($pid) { // $pid > 0, 如果fork成功,返回子進(jìn)程id

    // 父進(jìn)程邏輯
    $time = microtime(true);
    echo "我是父進(jìn)程:{$time}".NEWLINE;

}
執(zhí)行結(jié)果
當(dāng)前進(jìn)程:17472

我是父進(jìn)程:1528697500.2961

我是子進(jìn)程:1528697500.2961
測試總結(jié)
fork首先會執(zhí)行父進(jìn)程邏輯再執(zhí)行子進(jìn)程邏輯

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/28792.html

相關(guān)文章

  • PHPpcntl進(jìn)程控制教程三(多進(jìn)程消費模型)

    摘要:多進(jìn)程消費模型父進(jìn)程等待并控制子進(jìn)程的退出思路整理父進(jìn)程開啟后,直接獲取到子進(jìn)程的,然后存入數(shù)組,子進(jìn)程出來后直接開啟業(yè)務(wù)消費代碼,然后退出,然后父進(jìn)程等待子進(jìn)程退出,全部退出后父進(jìn)程結(jié)束代碼請在模式下運行子進(jìn)程的數(shù)量如果是資源類型的變量, 多進(jìn)程消費模型 父進(jìn)程等待并控制子進(jìn)程的退出 思路整理 父進(jìn)程開啟后,直接獲取到子進(jìn)程的pid,然后存入child數(shù)組,子進(jìn)程fork出來后直接開...

    617035918 評論0 收藏0
  • pcntl擴(kuò)展學(xué)習(xí)筆記pcntl_fork與pcntl_wait,串行執(zhí)行分析)

    摘要:對編程的理解,應(yīng)該到深入到操作系統(tǒng)級別。進(jìn)程控制,我一直都沒有接觸,感覺好高端,今天啃了一下擴(kuò)展的最簡單的兩個函數(shù),有點心得,記錄一下吧,歡迎拋磚。 對編程的理解,應(yīng)該到深入到操作系統(tǒng)級別。進(jìn)程控制,我一直都沒有接觸,感覺好高端,今天啃了一下pcntl擴(kuò)展的最簡單的兩個函數(shù),有點心得,記錄一下吧,歡迎拋磚。新建代碼文件 pcntl_wait.php,如下: $i = 0; ...

    TesterHome 評論0 收藏0
  • 從0到1優(yōu)雅實現(xiàn)PHP進(jìn)程管理

    摘要:目的綜上所述,我的目標(biāo)就是實現(xiàn)基于模式實現(xiàn)的多進(jìn)程管理工具。備注下文中,父進(jìn)程統(tǒng)稱為子進(jìn)程統(tǒng)稱為。最后我們通過下圖來簡單的總結(jié)和描述這個多進(jìn)程實現(xiàn)的過程控制上面實現(xiàn)了多進(jìn)程和多進(jìn)程的常駐內(nèi)存,那如何去管理呢答案多進(jìn)程通信。 _ | | _ __ __ _ _ __...

    lakeside 評論0 收藏0
  • PHP進(jìn)程初探 --- 再次談daemon進(jìn)程

    摘要:因為子進(jìn)程一定不會是組長進(jìn)程,所以子進(jìn)程可以調(diào)用。主進(jìn)程退出子進(jìn)程繼續(xù)執(zhí)行啦啦啦,啦啦啦,啦啦啦,已經(jīng)變成啦,開心一般服務(wù)器軟件都有寫配置項,比如以模式運行還是以模式運行。 [原文地址:https://blog.ti-node.com/blog...] 其實前面是談過一次daemon進(jìn)程的,但是并涉及過多原理,但是并不影響使用。今天打算說說關(guān)于daemon進(jìn)程更多的二三事,本質(zhì)上說,如...

    fox_soyoung 評論0 收藏0
  • workerman 簡要分析

    摘要:后面每開啟一個子進(jìn)程,會將子進(jìn)程的存儲到中,用來后面主進(jìn)程監(jiān)控子進(jìn)程,如果子進(jìn)程意外終止,主進(jìn)程可以重新佛。將當(dāng)前子進(jìn)程設(shè)置為會話組再次創(chuàng)建子進(jìn)程,為了防止在的系統(tǒng)下重新打開控制終端。 wokerman 啟動分析 @(學(xué)習(xí))[workerman, php] 前期想說的 也是最近才看的代碼,遇到不懂得地方就去google,所以這篇文章里面穿插了很多參考資料,可以直接點擊閱覽。 需要了解一...

    senntyou 評論0 收藏0

發(fā)表評論

0條評論

LeexMuller

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<