php 子进程_php多进程编程:第一次fork

工作原因,要用到php多进程,于是粗略的了解一下,完成之后把过程记录下来,整理成教程,希望对学习php多进程编程的程序员有所帮助。

前言

使用php cli的时候,我们在终端会这样

php hello.php

运行一个hello.php程序,这样linux会为我们创建一个进程。不考虑 nohup ,在一个终端,我们以cli方式运行的php程序也只能有这一个进程。一个进程处理的任务必定是有限的,在系统资源空闲那么多的情况下,为什么不使用多进程来提高效率呢?

不过php多进程需要安装pcntl和posix扩展(windows不支持)

fork,创建子进程

创建子进程的方法就是fork,在php里面,这个函数是pcntl_fork()

pcntl_fork作用就是创建和当前进程一样的子进程,这个子进程代码段和当前进程一模一样,但是拥有自己的数据段。看一个最简单的创建子进程的方法

$pid = pcntl_fork();

if( $pid == -1 ){

exit("fork error");

}

if( $pid == 0 ){

//子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程

echo "child process{$pid}\n";

}else{

//父进程fork之后,返回的就是子进程的pid号,pid不为0

echo "parent process{$pid}\n";

}

可以这样解释:pcntl_fork之后,系统会再次启动一个进程,重新运行当前的代码,就酱~

运行结果如下

3ca1a8eb64c46e858c912bd96d9b59e2.png

可以看到,父进程经过pcntl_fork之后,反回了一个pid为3558,下面ps的进程号有一个3558,那就是经过fork之后的子进程啦

来看一下进程(之前我在hello.php里面sleep了几十秒,所以程序未退出)

67b2ff1ae5e10da66a16eb3697142a42.png

这样,一个简单地多进程就出来了。如果要执行任务,那么就可以直接把任务的代码放到条件里面去就可以啦

赞赏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值