>  기사  >  백엔드 개발  >  pcntl_fork를 사용하여 PHP 다중 프로세스를 구현하는 예

pcntl_fork를 사용하여 PHP 다중 프로세스를 구현하는 예

WBOY
WBOY원래의
2016-07-25 08:58:31883검색
  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. ?>
复制代码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.