php多進程pcntl學習-殭屍進程

  上個月寫的文章,php多進程pcntl學習(一)如今發現並不完整,由於雖然提到了關閉子進程,可是並無回收子進程,簡單的說就是當子進程比父進程先退出,而父進程沒對其作任何處理的時候,子進程將會變成殭屍進程。php

 1 <?php
 2 $ppid = getmygid();
 3 $pid = pcntl_fork();
 4 if ($pid == -1){
 5     die('fork failed');
 6 }else if($pid == 0){
 7     $mypid = getmygid();
 8     echo 'I am child process. My PID is ' . $mypid . ' and my father is',$ppid.PHP_EOL;
 9     exit(); //關閉子進程 ,須要配合pcntl_wait使用 , 不然經過ps aux | grep php - >[php] <defunct> 殭屍進程
10 }else{
11     echo 'Oh my god! I am a father now! My child is'. $pid . ' and mine is ' . $ppid . PHP_EOL;
12     //pcntl_wait($status); //回收子進程,避免殭屍進程
13 }
14 //使主進程掛起
15 sleep(100);

  執行命令能夠看見,子進程變爲殭屍進程html

  

  殭屍進程雖然不佔什麼內存,可是很礙眼,院子裏一堆躺着的殭屍怎麼都以爲怪怪的。(別忘了它們還佔用着PID)post

  把12行的註釋打開,從新執行腳本測試 ps aux | grep php 能夠發現子進程退出後就被回收了.順便說下,經過信號也是可以作到的學習

  pcntl_signal(SIGCHLD, SIG_IGN);  //若是父進程不關心子進程何時結束,子進程結束後,內核會回收。 測試

  參考:http://www.jb51.net/article/56301.htmurl

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息