这篇文章主要介绍了PHP基于进程控制函数实现多线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

php有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。

CentOS 6 下yum安装php的,默认是不安装pcntl的,因此需要单独编译安装,首先下载对应版本的php,解压后

  1. cd php-version/ext/pcntl
  2. phpize
  3. ./configure && make && make install
  4. cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so
  5. echo "extension=pcntl.so" >> /etc/php.ini
  6. /etc/init.d/httpd restart

方便极了。
下面是示例代码:

  1. <?php
  2. header('content-type:text/html;charset=utf-8' );
  3. // 必须加载扩展
  4. if (!function_exists("pcntl_fork")) {
  5. die("pcntl extention is must !");
  6. }
  7. //总进程的数量
  8. $totals = 3;
  9. // 执行的脚本数量
  10. $cmdArr = array();
  11. // 执行的脚本数量的数组
  12. for ($i = 0; $i < $totals; $i++) {
  13. $cmdArr[] = array("path" => __DIR__ . "/run.php", 'pid' =>$i ,'total' =>$totals);
  14. }
  15. /*
  16. 展开:$cmdArr
  17. Array
  18. (
  19. [0] => Array
  20. (
  21. [path] => /var/www/html/company/pcntl/run.php
  22. [pid] => 0
  23. [total] => 3
  24. )
  25. [1] => Array
  26. (
  27. [path] => /var/www/html/company/pcntl/run.php
  28. [pid] => 1
  29. [total] => 3
  30. )
  31. [2] => Array
  32. (
  33. [path] => /var/www/html/company/pcntl/run.php
  34. [pid] => 2
  35. [total] => 3
  36. )
  37. )
  38. */
  39. pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
  40. foreach ($cmdArr as $cmd) {
  41. $pid = pcntl_fork(); //创建子进程
  42. //父进程和子进程都会执行下面代码
  43. if ($pid == -1) {
  44. //错误处理:创建子进程失败时返回-1.
  45. die('could not fork');
  46. } else if ($pid) {
  47. //父进程会得到子进程号,所以这里是父进程执行的逻辑
  48. //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
  49. pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
  50. } else {
  51. //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
  52. $path = $cmd["path"];
  53. $pid = $cmd['pid'] ;
  54. $total = $cmd['total'] ;
  55. echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n";
  56. exit(0) ;
  57. }
  58. }
  59. ?>

更多相关文章

  1. android reboot重启分析
  2. android最近任务列表,删除某个应用操作
  3. Android使用Linux命令执行文件操作
  4. Android(安卓)service: startService的代码实现
  5. Android(安卓)长按setOnItemLongClickListener 注意细节
  6. [android studio]com.android.ide.common.process.ProcessExcept
  7. Android高级进阶之路【六】Android(安卓)Framework解析
  8. android 两个apk之间恭喜数据SharedPreferences
  9. Android控件抖动效果

随机推荐

  1. Android与H5互调详细介绍
  2. Windows下获取Android系统源码
  3. Android 扫码盒子全局接收付款码
  4. 安卓大佬力荐,送你一份超详细的Android学
  5. Android(安卓)studio 快捷键,解决返回上次
  6. Android的多任务之路
  7. 谷歌Google仍需提高Android的五个方面
  8. Android采用HTML设计软件界面
  9. React Native封装Android原生UI和Android
  10. Android之网络丢包事件