魏长东

weichangdong

东邪

popen之php多进程

运行系统命令常常用exec,system之类的,

但是今天发现了proc_open和popen,proc_open自称比popen多一些功能,确实,proc_open有很多功能,可以与程序交互,

——但是,他是同步的,就是说一个程序没有运行结束,不能运行下一个!就没办法异步多进程了。

——但,popen是异步的

popen.php

<?php  
$process = array();  
for($i=0;$i<5;$i++)  
{  
    echo $i.' opening ... '.chr(10);  
    $process[$i] = popen('php '.dirname(__FILE__).'/run.php', 'r');  
    sleep(1);  
}  
  
echo 'OK>>'.chr(10);  
sleep(3);  
for($i=0;$i<5;$i++)  
{  
    $read = fread($process[$i], 64);  
    echo $read;  
    pclose($process[$i]);  
    echo $i.' closed'.chr(10);  
    sleep(1);  
} 
<?php  
while(1)  
{  
    $echo =getmypid() .'->'. date("YmHis").chr(10);  
    echo $echo ;  
  }

运行的结果:

0 opening ... 

1 opening ... 

2 opening ... 

3 opening ... 

4 opening ... 

OK>>

12052->201412081450

12052->201412081455

0 closed

12055->201412081451

12055->201412081456

1 closed

12057->201412081452

12057->201412081457

12057->201412081502

2 closed

12059->201412081453

12059->201412081458

12059->201412081503

12053 closed

12063->201412081454

12063->201412081459

12063->201412081504

12064 closed