日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

php多進程并發編程防止出現僵尸進程的方法分析

瀏覽:231日期:2022-09-11 11:55:37

本文實例講述了php多進程并發編程防止出現僵尸進程的方法。分享給大家供大家參考,具體如下:

對于用PHP進行多進程并發編程,不可避免要遇到僵尸進程的問題。

僵尸進程是指的父進程已經退出,而該進程dead之后沒有進程接受,就成為僵尸進程(zombie)進程。任何進程在退出前(使用exit退出) 都會變成僵尸進程(用于保存進程的狀態等信息),然后由init進程接管。如果不及時回收僵尸進程,那么它在系統中就會占用一個進程表項,如果這種僵尸進程過多,最后系統就沒有可以用的進程表項,于是也無法再運行其它的程序。

方法一:

父進程通過pcntl_wait和pcntl_waitpid等函數等待子進程結束

$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { //父進程阻塞著等待子進程的退出 //pcntl_wait($status); //pcntl_waitpid($pid, $status); //非阻塞方式 //pcntl_wait($status, WNOHANG); //pcntl_waitpid($pid, $status, WNOHANG);} else { sleep(3); echo 'child rn'; exit;}

方法二:

可以用signal函數為SIGCHLD安裝handler,因為子進程結束后,父進程會收到該信號,可以在handler中調用pcntl_wait或pcntl_waitpid來回收。

<?phpdeclare(ticks = 1);//信號處理函數function sig_func() { echo 'SIGCHLD rn'; pcntl_wait($status); //pcntl_waitpid(-1, $status); //非阻塞 //pcntl_wait($status, WNOHANG); //pcntl_waitpid(-1, $status, WNOHANG);}pcntl_signal(SIGCHLD, ’sig_func’);$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { sleep(10);} else { sleep(3); echo 'child rn'; exit;}

如果子進程還沒有結束時,父進程就結束了,那么init進程會自動接手這個子進程,進行回收。

如果父進程是循環,又沒有安裝SIGCHLD信號處理函數調用wait或waitpid()等待子進程結束。那么子進程結束后,沒有回收,就產生僵尸進程了。

例如:

<?php$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { for(;;) { sleep(3); }} else { echo 'child rn'; exit;}

父進程是個死循環,也沒有安裝SIGCHLD信號處理函數,子進程結束后。我們通過如下命令查看

> ps -A -o stat,ppid,pid,cmd | grep -e ’^[Zz]’

會發現一個僵尸進程。

代碼改進一下:

<?phpdeclare(ticks = 1);//信號處理函數function sig_func() { echo 'SIGCHLD rn'; pcntl_waitpid(-1, $status, WNOHANG);}pcntl_signal(SIGCHLD, ’sig_func’);$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { for(;;) { sleep(3); }} else { echo 'child rn'; exit;}

當子進程結束后,再通過命令查看時,我們發現這時就沒有僵尸進程了,這說明父進程對它進行了回收。

方法三:

如果父進程不關心子進程什么時候結束,那么可以用pcntl_signal(SIGCHLD, SIG_IGN)通知內核,自己對子進程的結束不感興趣,那么子進程結束后,內核會回收,并不再給父進程發送信號。

<?phpdeclare(ticks = 1);pcntl_signal(SIGCHLD, SIG_IGN);$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { for(;;) { sleep(3); }} else { echo 'child rn'; exit;}

當子進程結束后,SIGCHLD信號并不會發送給父進程,而是通知內核對子進程進行了回收。

方法四:

通過pcntl_fork兩次,也就是父進程fork出子進程,然后子進程中再fork出孫進程,這時子進程退出。那么init進程會接管孫進程,孫進程退出后,init會回收。不過子進程還是需要父進程進行回收。我們把業務邏輯放到孫進程中執行,父進程就不需要pcntl_wait或pcntl_waitpid來等待孫進程(即業務進程)。

<?php$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { //父進程等待子進程退出 pcntl_wait($status); echo 'parent rn';} else { //子進程再fork一次,產生孫進程 $cpid = pcntl_fork(); if($cpid == -1) { die(’fork error’); } else if ($cpid) { //這里是子進程,直接退出 echo 'child rn'; exit; } else { //這里是孫進程,處理業務邏輯 for($i = 0; $i < 10; ++$i) { echo 'work... rn'; sleep(3); } }}

子進程退出后,父進程回收子進程,孫進程繼續業務邏輯的處理。當孫進程也執行完畢退出后,init回收孫進程。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP進程與線程操作技巧總結》、《PHP網絡編程技巧總結》、《PHP基本語法入門教程》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产二区精品| 日韩大片在线观看| 久久精品天堂| 日韩av网站在线免费观看| 奶水喷射视频一区| 国产免费成人| 视频在线观看一区二区三区| 999久久久国产精品| 偷拍精品精品一区二区三区| 亚洲天堂1区| 精品视频91| 91免费精品| 久久影院一区| 久久久久中文| 99成人在线视频| 欧美~级网站不卡| 欧美精品一二| 亚洲专区视频| 国产丝袜一区| 91亚洲人成网污www| 精品网站aaa| 国产精品不卡| 欧美网站在线| 欧美久久香蕉| 亚洲天堂免费电影| 亚洲一级在线| 国产精品99精品一区二区三区∴| 精品国产午夜肉伦伦影院| 精品欠久久久中文字幕加勒比| 日韩在线网址| 欧美国产极品| 亚洲色诱最新| 国产精久久久| 免费观看不卡av| 日本成人手机在线| 精品一区91| 首页亚洲欧美制服丝腿| 精品国产三区在线| 亚洲一区二区av| 久久精品72免费观看| 久久一区二区三区电影| 久久精品99国产精品| 欧美1区2区3区| 国产毛片一区二区三区| 福利一区和二区| 日韩精品亚洲一区二区三区免费| 成人污污视频| 欧美日韩一区二区三区不卡视频 | 欧美片第1页综合| 不卡一区2区| 国产一区二区三区四区大秀| 日韩视频一二区| 精品一区毛片| av资源亚洲| 国产精品入口久久| 婷婷成人在线| 精品福利久久久| 国产精品美女久久久久久不卡| 蜜臀久久99精品久久久久久9| 亚洲va在线| 日韩在线看片| 精品九九在线| 国产精品一区二区三区av| 日本成人在线不卡视频| 蜜臀久久99精品久久久久久9 | 美国欧美日韩国产在线播放| 久久裸体视频| 精品国产精品久久一区免费式| 国产乱人伦丫前精品视频| 亚洲制服一区| 在线免费观看亚洲| 蜜桃久久久久久| 91精品国产一区二区在线观看| 亚洲欧洲美洲国产香蕉| 日本欧美不卡| 欧美不卡在线| 视频一区二区国产| 亚洲aa在线| 国产精品主播| 成人在线超碰| 免费视频亚洲| 亚洲精品看片| 日韩精品一页| 国产精品蜜月aⅴ在线| 日韩avvvv在线播放| 97久久亚洲| 国语对白精品一区二区| 国产99精品| 亚洲免费毛片| 精品九九在线| 视频在线观看国产精品| 日韩av中文在线观看| 麻豆国产精品| 91久久国产| 麻豆久久一区| 久久一区视频| 欧美精品一区二区久久| 一区二区三区四区在线观看国产日韩| 日本不卡视频一二三区| av免费不卡国产观看| 亚洲乱码一区| av资源中文在线| 亚洲色图综合| 久久婷婷丁香| 日本不卡中文字幕| 婷婷中文字幕一区| 美女精品网站| 精品中文字幕一区二区三区四区| 性欧美69xoxoxoxo| 麻豆精品视频在线观看视频| 亚洲自拍另类| 亚洲成人不卡| 欧美久久香蕉| 亚洲九九精品| 国产一区二区高清| 亲子伦视频一区二区三区| 欧美在线观看天堂一区二区三区| 国产乱子精品一区二区在线观看| 日韩欧美国产精品综合嫩v| 国产精品综合色区在线观看| 国产精品日韩欧美一区| 日韩一区二区三区免费播放| 国产精品美女在线观看直播 | 久久亚洲资源中文字| 日韩一区二区三区在线看| 精品国产免费人成网站| 国产日韩欧美| 电影亚洲精品噜噜在线观看| 你懂的国产精品| 国产日韩欧美在线播放不卡| 一区二区亚洲视频| 日韩一区精品视频| 婷婷激情综合| 在线视频精品| 日韩在线观看一区二区| 黄色在线一区| 国产午夜精品一区二区三区欧美 | 中文不卡在线| 午夜在线精品| 亚洲精品欧美| 欧美日韩中文| 精品视频国内| 三级小说欧洲区亚洲区| 激情欧美亚洲| 男人的天堂久久精品| 日韩精品亚洲专区| 国产探花一区| 天堂va在线高清一区| 奇米亚洲欧美| 国精品产品一区| 久久精品卡一| 欧美福利在线| 蜜臀久久久久久久| 国产精品nxnn| 欧美1区免费| 日韩一区二区三区高清在线观看| 亚洲+小说+欧美+激情+另类| 国产精品亚洲综合在线观看| 电影亚洲精品噜噜在线观看| 岛国av在线网站| 久久国产福利| 国内精品亚洲| 亚洲视频国产| 免费日韩成人| 亚洲欧美久久久| 精品国产亚洲一区二区三区| 欧美日韩精品免费观看视欧美高清免费大片| 色婷婷久久久| 国产精品亚洲人成在99www| 久久在线电影| 国产aⅴ精品一区二区三区久久| 欧美少妇精品| 日韩高清不卡一区| 91精品综合| 免费亚洲婷婷| 亚洲精品少妇| 91精品一区二区三区综合| 91精品尤物| 日韩中文字幕av电影| 日韩中文影院| 久久精品国产精品亚洲毛片| 日韩午夜av| 韩国精品主播一区二区在线观看| 国产亚洲欧美日韩精品一区二区三区 | 91精品国产调教在线观看| 欧美精品影院| 性欧美长视频| 精品国产美女a久久9999| 日韩精品一二区| 玖玖精品视频| 日韩午夜高潮| 欧美69视频| 欧美午夜精品一区二区三区电影| 免费在线播放第一区高清av| 日韩成人一级| 日韩三级视频| 日韩激情av在线| 国产一级成人av| 国产日韩精品视频一区二区三区| 91福利精品在线观看|