php进程解析

什么是进程

进程是计算机程序的实例,包含了其代码和活动。
计算机程序是被动的指令集合,而进程是这些指令的实际执行。
进程可以有多个,他们可能都指向同一个程序。
进程间无法直接通信,通常可以使用管道、消息队列、信号量、socket、stream等方式间接通信。

php默认是单进程模式的,但是通过pcntl扩展就可以支持多进程编程。

创建一个简单的进程

依照上述维基百科的定义,只要我们写出代码,然后将其运行起来,便可以得到一个进程。简单写一个死循环loop.php,然后在shell中使用ps aux | grep loop.php命令进行观察:

# shell1启动进程
php loop.php
# shell2观察进程
ps aux | grep loop.php
yuchanns  40053 100.0  0.1  4342852  16396 s001  R+  3:33PM   0:14.22 php loop.php

可以看到,我们获得了一个pid为40053的php进程。
当我们使用ctrl + c关闭窗口的时候,再次查看进程,就会发现这个进程已经消失了。
从这里我们可以得出一个特性,一般情况下,一个进程是跟开启会话的终端进行连接绑定的。这意味着一旦断开了会话,进程也就会消失

创建多进程

同一个程序可以有多个进程。任何进程都是基于最初的系统pid为1的进程fork出来的。我们这里讨论的多进程是指从第一个loop.php程序的进程fork出来的多个副本进程——即父子进程。
子进程获得父进程的数据空间、堆和栈的副本,彼此之间并不共享资源。
php依赖于pcntl_fork创建子进程。此函数调用一次,但是会返回两次。分别在fork之后的父进程和子进程中返回一次。子进程中返回值为0,父进程中返回值为子进程的pid。我们可以据此判断当前执行代码的进程是父进程还是子进程,并对其后续的执行步骤做出区分。
更多点击链接查看原文

你可能感兴趣的:(php进程解析)