PHP CLI模式下的多进程应用分析_php技巧

来源:脚本之家  责任编辑:小易  

www.zgxue.com防采集请勿采集本网。

PHP在很多时候不适合做常驻的SHELL进程, 他没有专门的gc例程, 也没有有效的内存管理途径. 所以如果用PHP做常驻SHELL, 你会经常被内存耗尽导致abort而unhappy.

最佳答案你好,你需要先找到你安装php的主程序,找到php安装目录下有个bin这个子目录,有个无扩展名的单独的php为名字的程序,比如你把php安装到了/usr/env/php下面,那么

而且, 如果输入数据非法, 而脚本没有检测, 导致abort, 也会让你很不开心.

开始-运行-cmd-找到你的php.exe所在的目录比如我的php.exe所在的目录就是e:\wamp\bin\php\php5.3.10

那? 怎么办呢?

问题说明: 写代码来解决多进程/线程同时读写一个文件的问题!!

多进程….

为什么呢?

优点:

1. 使用多进程, 子进程结束以后, 内核会负责回收资源

最佳答案CGI运行或添加HTTP的输出头部信息,CLI运行不添加,基本上没有别的区别了。

2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程.

php CLI方式运行的收集数据脚本过多导致PHP进程过多使用队列,限制进程数队列是线形的,多个脚本需要执行的时候可能是一样的

3. 一个常驻主进程, 只负责任务分发, 逻辑更清楚

Then, 怎么做呢?

接下来, 我们使用PHP提供的POSIX和Pcntl系列函数, 来实现一个PHP命令解析器, 主进程负责接受用户输入, 然后fork子进程执行, 并负责回显子进程的结束状态.

代码如下, 我加了注释, 如果有不懂的地方, 可以翻阅手册相关函数, 或者回复留言.

复制代码 代码如下:

#!/bin/env php

<?php

/** A example denoted muti-process application in php

* @filename fork.php

* @touch date Wed 10 Jun 2009 10:25:51 PM CST

* @author Laruence<laruence@baidu.com>

* @license http://www.zend.com/license/3_0.txt PHP License 3.0

* @version 1.0.0

*/

/** 确保这个函数只能运行在SHELL中 */

if (substr(php_sapi_name(), 0, 3) !== 'cli') {

die("This Programe can only be run in CLI mode");

}

/** 关闭最大执行时间限制, 在CLI模式下, 这个语句其实不必要 */

set_time_limit(0);

$pid = posix_getpid(); //取得主进程ID

$user = posix_getlogin(); //取得用户名

echo <<<EOD

USAGE: [command | expression]

input php code to execute by fork a new process

input quit to exit

Shell Executor version 1.0.0 by laruence

EOD;

while (true) {

$prompt = "\n{$user}$ ";

$input = readline($prompt);

readline_add_history($input);

if ($input == 'quit') {

break;

}

process_execute($input . ';');

}

exit(0);

function process_execute($input) {

$pid = pcntl_fork(); //创建子进程

if ($pid == 0) {//子进程

$pid = posix_getpid();

echo "* Process {$pid} was created, and Executed:\n\n";

eval($input); //解析命令

exit;

} else {//主进程

$pid = pcntl_wait($status, WUNTRACED); //取得子进程结束状态

if (pcntl_wifexited($status)) {

echo "\n\n* Sub process: {$pid} exited with {$status}";

}

}

}

但有一点, 我一定要提醒:

复制代码 代码如下:

Process Control should not be enabled within a webserver environment and unexpected results may happen if any Process Control functions are used within a webserver environment. --摘自PHP手也就是说, 打消你在PHP Web开发中使用多进程的念头吧!

原文:http://www.laruence.com/2009/06/11/930.html

内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • php 多进程编程父进程的阻塞与非阻塞实例分析
  • php实现的简单多进程服务器类完整示例
  • php 多进程与信号中断实现多任务常驻内存管理实例方法
  • php swoole多进程/多线程用法示例【基于php7nts版】
  • 深入解析php中的(伪)多线程与多进程
  • 深入探究php的多进程编程方法
  • php多进程之pcntl_fork的实例详解
  • php使用pcntl_fork实现多进程下载图片的方法
  • php 多进程 解决难题
  • php中实现进程锁与多进程的方法
  • php 的多进程操作实践案例分析
  • php使用glob函数遍历文件和目录详解
  • php空间不支持socket但支持curl时recaptcha的用法
  • 基于php双引号中访问数组元素报错的解决方法
  • apache下禁止php文件被直接访问的解决方案
  • php实现数据四舍五入的方法小结【4种方法】
  • 在javascript中调用php程序
  • php 采集心得技巧
  • 在windows xp下安装apache+mysql+php环境
  • php生成随机数的方法实例分析
  • php采集速度探究总结(原创)
  • php cli模式为什么可以一直执行程序
  • 有办法在windows下实现PHP的多进程编程吗
  • 请问下php如何进入CLI模式
  • php的进程是什么样的,单进程多进程,线程呢?
  • linux php怎么在cli模式下执行命令
  • PHP 怎么运行CLI模式
  • php题目求解!!!
  • CGI和CLI两种模式运行PHP的区别
  • 用PHP开发CLI脚本的人多吗?
  • php 判断当前是不是cli模式
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php技巧php 多进程编程父进程的阻塞与非阻塞实例分析php实现的简单多进程服务器类完整示例php 多进程与信号中断实现多任务常驻内存管理实例方法php swoole多进程/多线程用法示例【基于php7nts版】深入解析php中的(伪)多线程与多进程深入探究php的多进程编程方法php多进程之pcntl_fork的实例详解php使用pcntl_fork实现多进程下载图片的方法php 多进程 解决难题php中实现进程锁与多进程的方法php 的多进程操作实践案例分析php使用glob函数遍历文件和目录详解php空间不支持socket但支持curl时recaptcha的用法基于php双引号中访问数组元素报错的解决方法apache下禁止php文件被直接访问的解决方案php实现数据四舍五入的方法小结【4种方法】在javascript中调用php程序php 采集心得技巧在windows xp下安装apache+mysql+php环境php生成随机数的方法实例分析php采集速度探究总结(原创)php中json_decode()和json_encodphp 数组和字符串互相转换实现方php中使用curl实现get和post请求php中iconv函数使用方法php日期转时间戳,指定日期转换成php 页面跳转到另一个页面的多种php中文处理 中文字符串截取(mb_php下intval()和(int)转换使用与利用phpexcel实现excel数据的导入phpmyadmin 配置文件详解(配置)php设计模式之模板模式定义与用法详解win7+apache+php+mysql环境配置操作详解php 解压rar文件及zip文件的方法php安全配置php面向对象中static静态属性和静态方法的php实现的一致性hash算法详解【分布式算法php弹出对话框技巧详细解读php创建单例后台进程的方法示例php实现字符串的全排列详解php将图片保存为不同尺寸图片的图片类实例
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved