本文给出了PHP多
进程编程的一个例子,供大家
参考,如下:
第一步:
$ PHP m
命令看到PHP是否
安装,如果没有安装pcntl POSIX
扩展 使用场景:
1。
执行大量
网络耗时的
操作 2、我们需要做大量的计算,
系统中有多个CPU。为了让
用户体验更快,我们将
任务划分为几个小任务,最后合并它们。
多进程公共
函数:
pcntl_alarm -建立一个过程报警的报警
信号 pcntl_errno -别名pcntl_strerror
Pcntl_exec - executing a specified program in the current process space
pcntl_fork
创建一个子进程,产生一个分支(子过程)在当前进程的当前
位置。注释:叉创建子进程,父进程和子,从叉的位置
启动过程。不同的是,父进程返回的叉值是子进程号,而子进程得到0。
pcntl_get_last_error检索的最后pcntl
功能的
错误数
pcntl_getpriority获得任何进程的优先级
pcntl_setpriority
修改任何进程的优先级
pcntl_signal_dispatch -
处理器调用
等待信号
pcntl_signal安装信号处理器
pcntl_sigprocmask
设置或检索阻塞信号
pcntl_sigtimedwait信号等待超时机制
pcntl_sigwaitinfo等待信号
pcntl_strerror检索与给定的错误相关的系统错误
消息 pcntl_wait -等待或返回叉子进程的状态
pcntl_waitpid -等待或返回叉子进程的状态
pcntl_wexitstatus -返回子进程的中断返回代码
pcntl_wifexited -
检查状态代码表示正常
退出。
pcntl_wifsignaled -检查子状态代码是通过一定的信号中断
pcntl_wifstopped检查孩子是否过程目前停止
pcntl_wstopsig回报使子进程停止信号
pcntl_wtermsig回报导致子进程的中断信号
例1:
< PHP
最早的过程也是父进程。
parentpid美元= getmypid();
返回原始父进程。parentpid美元。php_eol;
创建子进程,返回进程ID
PID = pcntl_fork(美元);
如果($ = = 1){
退出(叉错误);
}
后 / / pcntl_fork,父进程返回子进程的ID,和子进程返回0
echo'id:'。$ PID。php_eol;
如果($ = 0){
实施pcntl_fork / /子过程,PID是0,而不再是一个叉的新工艺
mypid美元=(getmypid); / / getmypid()函数来获取当前进程的PID
echo'i是子进程。我的PID是。mypid美元。我的父亲们。
{人}
在父/叉之后,返回是一个子进程PID,PID 0。
我的神echo'oh!我现在是父亲了!我的孩子PID。
}
AA = shell_exec美元(PS AF grep index.php | );
回声$ AA;
实例二:打开多个子进程以避免叉泛
< PHP
最早的过程也是父进程。
parentpid美元= getmypid();
返回原始父进程。parentpid美元。php_eol;
十打开子进程
($ i = 0;$ i < 10;$ + +){
PID = pcntl_fork(美元);
如果($ = = 1){
无法应答!;
出口(1);
}
过程
如果(!$ PID){
子进程
工作区
回声子过程。Getmypid()。php_eol;
(退出);在执行流程逻辑后立即退出,以免往下走,然后叉子进程,
控制不好。
{人}
回声'父进程:'。Getmypid()。php_eol;
}
}
getmypid(回声)。php_eol;
AA = shell_exec美元(PS AF grep index.php | );
回声$ AA;
小心 uff1a
多进程的功能是通过pcntl_xxx系列功能。注:pcntl_xxx只能
运行在PHP CLI(命令行)的环境中,在Web
服务器环境中,会有意想不到的结果,请小心!
更多有关PHP相关内容的读者可以看到特别站:PHP进程和
线程操作技巧总结
希望本文能对PHP
程序设计有所帮助。