国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

MartinDai / 2281人閱讀

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

pcntl_wait 簡介
# 來源官方

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

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

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

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

參數(shù)
status
pcntl_wait()將會存儲狀態(tài)信息到status 參數(shù)上,這個通過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ù)。如果這個參數(shù)沒有提供,wait將會被用作系統(tǒng)調(diào)用。如果wait3不可用,提供參數(shù) options不會有任何效果。options的值可以是0 或者以下兩個常量或兩個常量“或運算”結(jié)果(即兩個常量代表意義都有效)。

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

        // 父進程邏輯

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

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

    } else { // $pid = 0

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

我是子進程,當前進程id:16605;父進程id:16604; 當前index:0; 當前時間:1528696774.1978

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

我是子進程,當前進程id:16614;父進程id:16613; 當前index:0; 當前時間:1528696781.4751

當前進程:16614

我是子進程,當前進程id:16615;父進程id:16614; 當前index:1; 當前時間:1528696781.4756

我是父進程,fork的子進程id: 16615;當前進程id:16614;父進程id:16613; 當前index:1; 當前時間:1528696781.4802

我是父進程,fork的子進程id: 16614;當前進程id:16613;父進程id:15128; 當前index:0; 當前時間:1528696781.4858

當前進程:16613

我是子進程,當前進程id:16616;父進程id:16613; 當前index:1; 當前時間:1528696781.4863

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

我是子進程,當前進程id:16626;父進程id:16625; 當前index:0; 當前時間:1528696787.3334

當前進程:16626

我是子進程,當前進程id:16627;父進程id:16626; 當前index:1; 當前時間:1528696787.3338

當前進程:16627

我是子進程,當前進程id:16628;父進程id:16627; 當前index:2; 當前時間:1528696787.3345

我是父進程,fork的子進程id: 16628;當前進程id:16627;父進程id:16626; 當前index:2; 當前時間:1528696787.3391

我是父進程,fork的子進程id: 16627;當前進程id:16626;父進程id:16625; 當前index:1; 當前時間:1528696787.3434

當前進程:16626

我是子進程,當前進程id:16629;父進程id:16626; 當前index:2; 當前時間:1528696787.3441

我是父進程,fork的子進程id: 16629;當前進程id:16626;父進程id:16625; 當前index:2; 當前時間:1528696787.3496

我是父進程,fork的子進程id: 16626;當前進程id:16625;父進程id:15128; 當前index:0; 當前時間:1528696787.3543

當前進程:16625

我是子進程,當前進程id:16630;父進程id:16625; 當前index:1; 當前時間:1528696787.3548

當前進程:16630

我是子進程,當前進程id:16631;父進程id:16630; 當前index:2; 當前時間:1528696787.3555

我是父進程,fork的子進程id: 16631;當前進程id:16630;父進程id:16625; 當前index:2; 當前時間:1528696787.3599

我是父進程,fork的子進程id: 16630;當前進程id:16625;父進程id:15128; 當前index:1; 當前時間:1528696787.3643

當前進程:16625

我是子進程,當前進程id:16632;父進程id:16625; 當前index:2; 當前時間:1528696787.3649

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    testbird 評論0 收藏0

發(fā)表評論

0條評論

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