PHP的pcntl進程式控制制之多進程消費模型

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP的pcntl進程式控制制之多進程消費模型,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

多進程消費模型

父進程等待並控制子進程的退出

思路整理

父進程開啟後,直接擷取到子進程的pid,然後存入child數組,子進程fork出來後直接開啟業務消費代碼,然後exit(0)退出,然後父進程pcntl_wait等待子進程退出,全部退出後父進程結束

代碼

const NEWLINE = "\n\n";if (strtolower(php_sapi_name()) != 'cli') {    die("請在cli模式下運行");}$bizPath = "./childBiz/";if (!is_dir($bizPath)) {    @mkdir($bizPath, 0755, true);}$child = [];$index = 0;$loop = 10; //子進程的數量//如果是資源類型的變數,父子進程會共用//$f = fopen("./pcntl_fork_2.php", "r");while ($index < $loop) {    echo "當前進程:" . getmypid() . NEWLINE;    $pid = pcntl_fork(); //fork出子進程    //fork後父進程會走自己的邏輯,子進程從處開始走自己的邏輯,堆棧資訊會完全複製給子進程記憶體空間,父子進程相互獨立    if ($pid == -1) { // 建立錯誤,返回-1        die('進程fork失敗');    } else if ($pid) { // $pid > 0, 如果fork成功,返回子進程id        //擷取建立的子進程        $child[$pid] = $pid;        echo "{$pid} child create!" . microtime(true) . NEWLINE;    } else { // $pid = 0        // 子進程邏輯        $sleepTime = rand(5, 18);        sleep($sleepTime);        $time = microtime(true);        file_put_contents($bizPath.getmypid().".log", $time . ":" . $index . PHP_EOL, FILE_APPEND);        exit(0);    }    $index++;}while (count($child)) {    //阻塞等待    $pid = pcntl_wait($status);    $time = microtime(true);    file_put_contents("./father.log", $time . ":" . $pid . ":" . $status . PHP_EOL, FILE_APPEND);    if ($pid > 0) {        unset($child[$pid]);    }    if ($pid == -1) {        unset($child);    }//    foreach ($child as $k => $pid) {//        //不阻塞迴圈判斷 WNOHANG表示如果沒有子進程退出立刻返回//        $res = pcntl_waitpid($pid, $status, WNOHANG);//        $time = microtime(true);//        file_put_contents("./father.log", $time . ":" . $pid . ":" . $res . ":" . $status . PHP_EOL, FILE_APPEND);//        if (-1 == $res || $res > 0) {//            unset($child[$k]);//        }//    }}//fclose($f);//主進程退出exit(0);

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.