成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

LeexMuller / 566人閱讀

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

pcntl 簡(jiǎn)介

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

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

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

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

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

官方文檔

pcntl官方文檔

pcntl_fork
# 來(lái)源官方

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

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

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

返回值
成功時(shí),在父進(jìn)程執(zhí)行線程內(nèi)返回產(chǎn)生的子進(jìn)程的PID,在子進(jìn)程執(zhí)行線程內(nèi)返回0。失敗時(shí),在 父進(jìn)程上下文返回-1,不會(huì)創(chuàng)建子進(jìn)程,并且會(huì)引發(fā)一個(gè)PHP錯(cuò)誤。
代碼
 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后會(huì)子進(jìn)程先執(zhí)行還是父進(jìn)程先執(zhí)行邏輯呢? 測(cè)試代碼
此處我們調(diào)換上面代碼的父子進(jìn)程的if順序
if ($pid == -1) { // 創(chuàng)建錯(cuò)誤,返回-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
測(cè)試總結(jié)
fork首先會(huì)執(zhí)行父進(jìn)程邏輯再執(zhí)行子進(jìn)程邏輯

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28792.html

相關(guān)文章

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

    摘要:多進(jìn)程消費(fèi)模型父進(jìn)程等待并控制子進(jìn)程的退出思路整理父進(jìn)程開(kāi)啟后,直接獲取到子進(jìn)程的,然后存入數(shù)組,子進(jìn)程出來(lái)后直接開(kāi)啟業(yè)務(wù)消費(fèi)代碼,然后退出,然后父進(jìn)程等待子進(jìn)程退出,全部退出后父進(jìn)程結(jié)束代碼請(qǐng)?jiān)谀J较逻\(yùn)行子進(jìn)程的數(shù)量如果是資源類型的變量, 多進(jìn)程消費(fèi)模型 父進(jìn)程等待并控制子進(jìn)程的退出 思路整理 父進(jìn)程開(kāi)啟后,直接獲取到子進(jìn)程的pid,然后存入child數(shù)組,子進(jìn)程fork出來(lái)后直接開(kāi)...

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

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

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

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

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

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

    fox_soyoung 評(píng)論0 收藏0
  • workerman 簡(jiǎn)要分析

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

    senntyou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

LeexMuller

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<