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

<?php

$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之后,系统会再次启动一个进程,重新运行当前的代码,就酱~

运行结果如下

可以看到,父进程经过pcntl_fork之后,反回了一个pid为3558,下面ps的进程号有一个3558,那就是经过fork之后的子进程啦
来看一下进程(之前我在hello.php里面sleep了几十秒,所以程序未退出)

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

 

赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注