• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php多进程pcntl学习-僵尸进程php多进程pcntl学习(一)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  上个月写的文章,php多进程pcntl学习(一)现在发现并不完整,因为虽然提到了关闭子进程,但是并没有回收子进程,简单的说就是当子进程比父进程先退出,而父进程没对其做任何处理的时候,子进程将会变成僵尸进程。

 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);

  执行命令可以看见,子进程变为僵尸进程

  

  僵尸进程虽然不占什么内存,但是很碍眼,院子里一堆躺着的僵尸怎么都觉得怪怪的。(别忘了它们还占用着PID)

  把12行的注释打开,重新执行脚本测试 ps aux | grep php 可以发现子进程退出后就被回收了.顺便说下,通过信号也是能够做到的

  pcntl_signal(SIGCHLD, SIG_IGN);  //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。

  参考:http://www.ogeek.net/article/56301.htm


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++/Php/Python 语言执行shell命令 - 旭东的博客发布时间:2022-07-10
下一篇:
Centos7安装配置Apache+Mysql5.7+PHP7.0+phpmyadmin发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap