Rumah  >  Artikel  >  pembangunan bahagian belakang  >  利用pcntl_fork实现PHP多进程的例子

利用pcntl_fork实现PHP多进程的例子

WBOY
WBOYasal
2016-07-25 08:58:31828semak imbas
  1. /home/jerry/Public/php-5.4.0/ext/pcntl
复制代码

解释: int pcntl_fork ( void ) pcntl_fork()函数创建一个子进程,这个子进程仅PID(进程号) 和PPID(父进程号)与其父进程不同。 成功时,在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。 失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。 int pcntl_wait ( int &$status [, int $options = 0 ] ) pcntl_wait — 等待或返回fork的子进程状态 void pcntl_exec ( string $path [, array $args [, array $envs ]] ) pcntl_exec — 在当前进程空间执行指定程序

例子:

  1. /**
  2. * pcntl_fork 多进程的代码示例
  3. * edit bbs.it-home.org
  4. */
  5. $cmds=array(
  6. array('/home/jerry/projects/www/test2.php'),
  7. array('/home/jerry/projects/www/test3.php')
  8. );
  9. foreach($cmds as $cmd){
  10. $pid=pcntl_fork();
  11. if($pid==-1){
  12. //进程创建失败
  13. echo '创建子进程失败时返回-1';
  14. exit(-1);
  15. }
  16. else if($pid){
  17. //父进程会得到子进程号,所以这里是父进程执行的逻辑
  18. pcntl_wait($status,WNOHANG);
  19. }
  20. else{
  21. //子进程处理逻辑
  22. sleep(5);
  23. pcntl_exec('/usr/bin/php',$cmd);
  24. exit(0);
  25. }
  26. }
  27. ?>
复制代码


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn