Heim  >  Artikel  >  Backend-Entwicklung  >  利用pcntl_fork实现PHP多进程的例子

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

WBOY
WBOYOriginal
2016-07-25 08:58:31867Durchsuche
  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. ?>
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn