php中pcntl_fork創建子進程

PHP技術大全 / 2019-03-15 14:54:18

一、php中pcntl_fork函數概述

  1. pcntl_fork()函數是php中用于創建子進程的一個函數,返回創建的子進程的pid。

  2. 該函數創建子進程具體fork的過程:

    (1)調用該函數即創建一個子進程,創建成功父進程返回子進程的pid,子進程返回0;
    (2)創建子進程實際上對父進程的一個拷貝,共享代碼空間,拷貝父進程的數據,也就是說父進程改變父進程的數據,子進程改變子進程的數據變量等;

二、示例代碼分析

  1. 代碼示例:

       $curr_pid = posix_getpid();//獲取當前的進程id

    //將當前進程的id寫入文件中
    echo '當前進程:'.$curr_pid.PHP_EOL;

    //開始創建子進程
    $son_pid = pcntl_fork();//返回子進程的id

    //查看當前進程
    echo '創建子進程之后當前的進程為:'.posix_getpid().PHP_EOL;

    //創建了子進程之后
    if($son_pid > 0){
    echo '子進程id:'.$son_pid.PHP_EOL;
    }
  2. 以上代碼執行后結果為:

  3. 示例代碼分析:

    (1)發現創建了子進程之后,系統會切換到子進程中,而子進程中的代碼是從含有pcntl_fork函數的那行執行的
    (2)創建子進程之后,子進程的代碼段是拷貝pcntl_fork函數及之后的代碼段,之前的代碼段并不拷貝,但是具體的數據變量子進程仍然會拷貝
    (3)可見,fork之后程序會分叉執行,即子進程執行

三、pcntl_fork的業務場景舉例

  1. php的多進程中,常用pcntl_fork來實現并發,多用于一些簡單工具的實現。

  2. 例如監控工具,想要監控幾個不同指標的情形,可以使用主進程監控各指標的配置變化,然后對每個指標分別fork一個子進程來監控其具體的情形,當主進程發現指標的配置改變則kill掉之前的子進程重新創建子進程進行監控。

  3. 主進程進行業務分發操作,子進程進行具體的業務邏輯執行。

更多精彩

敬請關注“PHP技術大全”微信公眾號


青海快三开奖信息