码迷,mamicode.com
首页 > 编程语言 > 详细

php实现多进程、多线程

时间:2017-02-15 14:50:33      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:php   pre   进程   并行   收集   div   exe   array   僵尸进程   

  孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

  僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

  僵尸进程危害:如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。

  已经产生的僵尸进程,解决方法:kill掉父进程,它产生的僵死进程就变成了孤儿进 程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源。

  僵尸进程解决办法

  (1)通过信号机制

    子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。

  (2)fork两次
    《Unix 环境高级编程》8.6节说的非常详细。原理是将子进程成为孤儿进程,从而其的父进程变为init进程,通过init进程可以处理僵尸进程。

 

1. [代码]PHP实现多进程并行操作(可做守护进程) 

 1 /**
 2  * 入口函数
 3  * 将此文件保存为 ProcessOpera.php
 4  * 在terminal中运行 /usr/local/php/bin/php ProcessOpera.php & 
 5  * 查看进程 ps aux|grep php
 6  */
 7  
 8  
 9 ProcessOpera("runCode", array(), 8);
10  
11 /**
12  * run Code
13  */
14 function runCode($opt = array()) {
15    //需要在守护进程中运行的代码
16 }
17  
18 /**
19  * $func为子进程执行具体事物的函数名称
20  * $opt为$func的参数 数组形式
21  * $pNum 为fork的子进程数量
22  */
23 function ProcessOpera($func, $opts = array(), $pNum = 1) {
24     while(true) {
25         $pid = pcntl_fork();
26         if($pid == -1) {
27             exit("pid fork error");
28         }   
29         if($pid) {
30             static $execute = 0;
31             $execute++;
32             if($execute >= $pNum) {
33                 pcntl_wait($status);
34                 $execute--;
35             }   
36         } else {
37             while(true) {
38                 //somecode
39                 $func($opts);
40                 sleep(1);
41             }   
42             exit(0);
43         }   
44     }   
45 }

 

php实现多进程、多线程

标签:php   pre   进程   并行   收集   div   exe   array   僵尸进程   

原文地址:http://www.cnblogs.com/binghuo000/p/6401123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!