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

資訊專欄INFORMATION COLUMN

PHP的pcntl進(jìn)程控制教程二(pcntl_wait)

MartinDai / 2279人閱讀

摘要:簡介來源官方等待或返回的子進(jìn)程狀態(tài)函數(shù)刮起當(dāng)前進(jìn)程的執(zhí)行直到一個(gè)子進(jìn)程退出或接收到一個(gè)信號要求中斷當(dāng)前進(jìn)程或調(diào)用一個(gè)信號處理函數(shù)。子進(jìn)程使用的所有系統(tǒng)資源將被釋放。子進(jìn)程已經(jīng)退出并且其狀態(tài)未報(bào)告時(shí)返回。

pcntl_wait 簡介
# 來源官方

pcntl_wait — 等待或返回fork的子進(jìn)程狀態(tài)

int pcntl_wait ( int &$status [, int $options = 0 ] )

wait函數(shù)刮起當(dāng)前進(jìn)程的執(zhí)行直到一個(gè)子進(jìn)程退出或接收到一個(gè)信號要求中斷當(dāng)前進(jìn)程或調(diào)用一個(gè)信號處理函數(shù)。 如果一個(gè)子進(jìn)程在調(diào)用此函數(shù)時(shí)已經(jīng)退出(俗稱僵尸進(jìn)程),此函數(shù)立刻返回。子進(jìn)程使用的所有系統(tǒng)資源將 被釋放。關(guān)于wait在您系統(tǒng)上工作的詳細(xì)規(guī)范請查看您系統(tǒng)的wait(2)手冊。

Note:
這個(gè)函數(shù)等同于以-1作為參數(shù)pid 的值并且沒有options參數(shù)來調(diào)用pcntl_waitpid() 函數(shù)。

參數(shù)
status
pcntl_wait()將會(huì)存儲(chǔ)狀態(tài)信息到status 參數(shù)上,這個(gè)通過status參數(shù)返回的狀態(tài)信息可以用以下函數(shù) pcntl_wifexited(), pcntl_wifstopped(), pcntl_wifsignaled(), pcntl_wexitstatus(), pcntl_wtermsig()以及 pcntl_wstopsig()獲取其具體的值。

options
如果您的操作系統(tǒng)(多數(shù)BSD類系統(tǒng))允許使用wait3,您可以提供可選的options 參數(shù)。如果這個(gè)參數(shù)沒有提供,wait將會(huì)被用作系統(tǒng)調(diào)用。如果wait3不可用,提供參數(shù) options不會(huì)有任何效果。options的值可以是0 或者以下兩個(gè)常量或兩個(gè)常量“或運(yùn)算”結(jié)果(即兩個(gè)常量代表意義都有效)。

options可用值
WNOHANG    如果沒有子進(jìn)程退出立刻返回。
WUNTRACED    子進(jìn)程已經(jīng)退出并且其狀態(tài)未報(bào)告時(shí)返回。
返回值
pcntl_wait()返回退出的子進(jìn)程進(jìn)程號,發(fā)生錯(cuò)誤時(shí)返回-1,如果提供了 WNOHANG作為option(wait3可用的系統(tǒng))并且沒有可用子進(jìn)程時(shí)返回0。
測試代碼
 0, 如果fork成功,返回子進(jìn)程id

        // 父進(jìn)程邏輯

        pcntl_wait($status); // 父進(jìn)程必須等待一個(gè)子進(jìn)程退出后,再創(chuàng)建下一個(gè)子進(jìn)程。

        $child_id = $pid; //子進(jìn)程的ID
        $pid = posix_getpid(); //獲取當(dāng)前進(jìn)程Id
        $ppid = posix_getppid(); // 進(jìn)程的父級ID
        $time = microtime(true);
        echo "我是父進(jìn)程,fork的子進(jìn)程id: {$child_id};當(dāng)前進(jìn)程id:{$pid};父進(jìn)程id:{$ppid}; 當(dāng)前index:{$index}; 當(dāng)前時(shí)間:{$time}".PHP_EOL;

    } else { // $pid = 0

        // 子進(jìn)程邏輯
        $cid = $pid;
        $pid = posix_getpid();
        $ppid = posix_getppid();
        $myid = getmypid();
        $time = microtime(true);
        echo "我是子進(jìn)程,當(dāng)前進(jìn)程id:{$pid};父進(jìn)程id:{$ppid}; 當(dāng)前index:{$index}; 當(dāng)前時(shí)間:{$time}".PHP_EOL;
        //exit;
        //sleep(2);
    }
    $index++;
}
loop = 1 執(zhí)行結(jié)果
當(dāng)前進(jìn)程:16604

我是子進(jìn)程,當(dāng)前進(jìn)程id:16605;父進(jìn)程id:16604; 當(dāng)前index:0; 當(dāng)前時(shí)間:1528696774.1978

我是父進(jìn)程,fork的子進(jìn)程id: 16605;當(dāng)前進(jìn)程id:16604;父進(jìn)程id:15128; 當(dāng)前index:0; 當(dāng)前時(shí)間:1528696774.2032
loop = 2 執(zhí)行結(jié)果
當(dāng)前進(jìn)程:16613

我是子進(jìn)程,當(dāng)前進(jìn)程id:16614;父進(jìn)程id:16613; 當(dāng)前index:0; 當(dāng)前時(shí)間:1528696781.4751

當(dāng)前進(jìn)程:16614

我是子進(jìn)程,當(dāng)前進(jìn)程id:16615;父進(jìn)程id:16614; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696781.4756

我是父進(jìn)程,fork的子進(jìn)程id: 16615;當(dāng)前進(jìn)程id:16614;父進(jìn)程id:16613; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696781.4802

我是父進(jìn)程,fork的子進(jìn)程id: 16614;當(dāng)前進(jìn)程id:16613;父進(jìn)程id:15128; 當(dāng)前index:0; 當(dāng)前時(shí)間:1528696781.4858

當(dāng)前進(jìn)程:16613

我是子進(jìn)程,當(dāng)前進(jìn)程id:16616;父進(jìn)程id:16613; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696781.4863

我是父進(jìn)程,fork的子進(jìn)程id: 16616;當(dāng)前進(jìn)程id:16613;父進(jìn)程id:15128; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696781.4913
loop = 3 執(zhí)行結(jié)果
當(dāng)前進(jìn)程:16625

我是子進(jìn)程,當(dāng)前進(jìn)程id:16626;父進(jìn)程id:16625; 當(dāng)前index:0; 當(dāng)前時(shí)間:1528696787.3334

當(dāng)前進(jìn)程:16626

我是子進(jìn)程,當(dāng)前進(jìn)程id:16627;父進(jìn)程id:16626; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696787.3338

當(dāng)前進(jìn)程:16627

我是子進(jìn)程,當(dāng)前進(jìn)程id:16628;父進(jìn)程id:16627; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3345

我是父進(jìn)程,fork的子進(jìn)程id: 16628;當(dāng)前進(jìn)程id:16627;父進(jìn)程id:16626; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3391

我是父進(jìn)程,fork的子進(jìn)程id: 16627;當(dāng)前進(jìn)程id:16626;父進(jìn)程id:16625; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696787.3434

當(dāng)前進(jìn)程:16626

我是子進(jìn)程,當(dāng)前進(jìn)程id:16629;父進(jìn)程id:16626; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3441

我是父進(jìn)程,fork的子進(jìn)程id: 16629;當(dāng)前進(jìn)程id:16626;父進(jìn)程id:16625; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3496

我是父進(jìn)程,fork的子進(jìn)程id: 16626;當(dāng)前進(jìn)程id:16625;父進(jìn)程id:15128; 當(dāng)前index:0; 當(dāng)前時(shí)間:1528696787.3543

當(dāng)前進(jìn)程:16625

我是子進(jìn)程,當(dāng)前進(jìn)程id:16630;父進(jìn)程id:16625; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696787.3548

當(dāng)前進(jìn)程:16630

我是子進(jìn)程,當(dāng)前進(jìn)程id:16631;父進(jìn)程id:16630; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3555

我是父進(jìn)程,fork的子進(jìn)程id: 16631;當(dāng)前進(jìn)程id:16630;父進(jìn)程id:16625; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3599

我是父進(jìn)程,fork的子進(jìn)程id: 16630;當(dāng)前進(jìn)程id:16625;父進(jìn)程id:15128; 當(dāng)前index:1; 當(dāng)前時(shí)間:1528696787.3643

當(dāng)前進(jìn)程:16625

我是子進(jìn)程,當(dāng)前進(jìn)程id:16632;父進(jìn)程id:16625; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3649

我是父進(jìn)程,fork的子進(jìn)程id: 16632;當(dāng)前進(jìn)程id:16625;父進(jìn)程id:15128; 當(dāng)前index:2; 當(dāng)前時(shí)間:1528696787.3697
總結(jié)
1.從執(zhí)行的多次結(jié)果得知,程序從外到內(nèi)創(chuàng)建fork。然后再從內(nèi)最后一次fork開始退出
2.如一次fork之后,程序的父進(jìn)程因pcntl_wait阻塞,然后等待本次fork的子進(jìn)程退出,然后相應(yīng)的子進(jìn)程的父進(jìn)程執(zhí)行邏輯并退出
3.然后執(zhí)行本子進(jìn)程的父進(jìn)程依次循環(huán)2的邏輯退出,最終結(jié)束總進(jìn)程

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

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

相關(guān)文章

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

    摘要:多進(jìn)程消費(fèi)模型父進(jìn)程等待并控制子進(jìn)程的退出思路整理父進(jìn)程開啟后,直接獲取到子進(jìn)程的,然后存入數(shù)組,子進(jìn)程出來后直接開啟業(yè)務(wù)消費(fèi)代碼,然后退出,然后父進(jìn)程等待子進(jìn)程退出,全部退出后父進(jìn)程結(jié)束代碼請?jiān)谀J较逻\(yùn)行子進(jìn)程的數(shù)量如果是資源類型的變量, 多進(jìn)程消費(fèi)模型 父進(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ò)展的最簡單的兩個(gè)函數(shù),有點(diǎn)心得,記錄一下吧,歡迎拋磚。 對編程的理解,應(yīng)該到深入到操作系統(tǒng)級別。進(jìn)程控制,我一直都沒有接觸,感覺好高端,今天啃了一下pcntl擴(kuò)展的最簡單的兩個(gè)函數(shù),有點(diǎn)心得,記錄一下吧,歡迎拋磚。新建代碼文件 pcntl_wait.php,如下: $i = 0; ...

    TesterHome 評論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)稱為。最后我們通過下圖來簡單的總結(jié)和描述這個(gè)多進(jìn)程實(shí)現(xiàn)的過程控制上面實(shí)現(xiàn)了多進(jìn)程和多進(jìn)程的常駐內(nèi)存,那如何去管理呢答案多進(jìn)程通信。 _ | | _ __ __ _ _ __...

    lakeside 評論0 收藏0
  • PHP 進(jìn)程實(shí)現(xiàn)與管理

    摘要:運(yùn)行模式實(shí)現(xiàn)進(jìn)程前,需了解常見的的運(yùn)行模式通用網(wǎng)關(guān)接口模式模式命令行模式模塊模式作為服務(wù)器模塊而進(jìn)程則是使用命令行模式運(yùn)行的基本實(shí)現(xiàn)中提供了一個(gè)擴(kuò)展,可以利用操作系統(tǒng)的調(diào)用來實(shí)現(xiàn)多進(jìn)程。 應(yīng)用場景 一些耗時(shí)任務(wù): 大數(shù)據(jù)表分表后的統(tǒng)計(jì)信息功能 分批發(fā)送短信或郵件功能 其他可分目標(biāo)的任務(wù)功能(很多種) 所以我們就需要一個(gè)常駐內(nèi)存的任務(wù)管理工具,為了保證實(shí)時(shí)性,一方面我們讓它一直執(zhí)行任...

    MockingBird 評論0 收藏0
  • PHP 進(jìn)程實(shí)現(xiàn)與管理

    摘要:運(yùn)行模式實(shí)現(xiàn)進(jìn)程前,需了解常見的的運(yùn)行模式通用網(wǎng)關(guān)接口模式模式命令行模式模塊模式作為服務(wù)器模塊而進(jìn)程則是使用命令行模式運(yùn)行的基本實(shí)現(xiàn)中提供了一個(gè)擴(kuò)展,可以利用操作系統(tǒng)的調(diào)用來實(shí)現(xiàn)多進(jìn)程。 應(yīng)用場景 一些耗時(shí)任務(wù): 大數(shù)據(jù)表分表后的統(tǒng)計(jì)信息功能 分批發(fā)送短信或郵件功能 其他可分目標(biāo)的任務(wù)功能(很多種) 所以我們就需要一個(gè)常駐內(nèi)存的任務(wù)管理工具,為了保證實(shí)時(shí)性,一方面我們讓它一直執(zhí)行任...

    testbird 評論0 收藏0

發(fā)表評論

0條評論

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