三、Swoole 基础学习笔记 - 了解 Swoole 相关进程
hi,我是温新,一名PHPer
文章基于 Swoole 5.0 版本编写。
学习目标:了解 Swoole 是怎么工作的及相关进程。
说明:本篇文章结合官方文档编写及参考网络资料编写,虽非全部原创,但也是结合了自己的理解,若转载请附带本文 URL,编写不易,持续编写更不易,谢谢!
正所谓,"磨刀不误砍柴工",有了上篇文章的快速体验,本篇文章将了解 Swoole 相关进程,以便更好的了解 Swoole 的运行过程。
准备工作
安装 网络管理工具和进程管理工具。
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># deepin</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">apt <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-y</span> install net-tools psmisc</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># Rocky Linux</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">dnf <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-y</span> install net-tools psmisc</span>
通过这两个工具来分析 Swoole 启动后的进程。
Swoole 是如何运行的
本篇文章会延续 Swoole 基础学习笔记 - 先把 Swoole 跑起来 案例来了解相关进程及线程。在这之前要先来了解一下 Swoole 是如何运行的。
Swoole 运行流程图
基于这个运行流程图,我们来看看 $server->start();
发生了什么。服务启动后如有如下操作:
Swoole 服务启动后发生的事
:启动成功后会创建 worker_num + 2
个进程。 Master 进程
+ Manager
进程 + serv->worker_num
个进程。比如说当我们设置进程数为 2 时,实际上启动了 4 个进程;结合运行流程图来看,服务启动后会创建 Master 进程、Worker 进程。
现在我们来总结下 Swoole 进程模型:Master - Manager - Worker
进程。这也是为什么设置 worker_num
进程启动后,查看进程会多出两个进程的原因,而这两个进程就是 master 进程和 manager 进程。
Swoole 进程/线程结构图
接下来再看看这些进程和线程都有什么作用,如下:
Master 进程
:为主进程,主进程中有多个 Reactor
线程,基于 epoll/kqueue
进行网络事件轮询。收到数据后转发到 Worker
进程去处理;
Manager 进程
:为管理进程,是对所有 Worker
进程生命周期结束或发生异常时自动回收,并创建新的 Worker
进程;
Worker 进程
:为工作进程,对收到的数据进行处理,包括协议解析和响应请求(未设置 worker_num
,底层会启动与 CPU
数量一致的 Worker
进程);
Task 进程
:异步工作进程,接收由Worker进程投递的任务,TaskWorker以多进程的方式运行,是同步阻塞模式;
Reactor 线程
:reactor 线程由 master 进程创建,reactor 负责维护客户端 TCP 连接、处理网络 IO、处理协议、收发数据。
了解了 Swoole 进程与线程,那么他们之间有什么关系呢?用个通俗的例子来说明,Server
是饭馆,Reactor
是服务员,Worker
是厨师。服务员将菜单拿给客户,点完菜后,服务员将菜单拿给大厨,在这个过程中,Worker
去生产客户所需要的菜,TaskWorker
可以理解为大厨的徒弟,可以帮助大厨干些琐事。
Swoole 启动后的进程与线程
结合上述知识,我们现在来看看 Swoole Server 启动后的进程与线程,
查看 Master 进程
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$netstat</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-nltp</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 9501,我们启动的 server 服务,这是 master 主进程</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">tcp <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0.0.0:9501 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0.0.0:* LISTEN <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">76459</span>/php </span>
查看进程树
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$pstree</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-p</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">76459</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 76459 master 进程;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 76460 manager 进程</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 76467... worker 进程</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 76461... 线程</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">php(76459)─┬─php(76460)─┬─php(76467)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76470)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76471)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76472)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76473)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76474)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76475)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76476)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76477)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76478)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76479)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76480)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76481)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76482)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(76483)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ └─php(76484)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(76461)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(76462)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(76463)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(76464)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(76465)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(76466)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(76468)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> └─{php}(76469)</span>
通过进程树可以清晰看出进程间的关系,76459 master 进程下有线程,76460 manager 进程下有 worker进程。查看了进程与线程,有了这样一丝疑惑,怎么有这么多进程与线程?
当没有设置进程时,Swoole 线程与电脑 CPU 核数有关,我的电脑 CPU 为 8 核,因此有 8 个线程。这个值是可以配置的,下面我们就来看看。
set 方法设置进程数与线程数
set()
用于设置运行时的各项参数。服务器启动后通过 $serv->setting
来访问 Server->set
方法设置的参数数组。
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">new</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">Swoole\Server</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'0.0.0.0'</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">9501</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">SWOOLE_PROCESS</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">set</span>([</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 设置 3 个 worker 进程</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'worker_num'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 设置 2 个 reactor 线程</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'reactor_num'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">]);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Connect'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fd</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Receive'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fd</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$reactorId</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$data</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">send</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fd</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'服务器返回:'</span> . <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$data</span>) . <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">PHP_EOL</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Close'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fd</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">start</span>();</span>
修改文件后需要中断服务,然后再重新启动才能生效。当前设置 worker_num
为 3 个进程后,猜一猜会启动多少个进程?答案是会启动 5 个进程,如果不明白为什么会启动 5 个进程,可以看看上面的内容。
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$pstree</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-p</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">91875</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">php(91875)─┬─php(91876)─┬─php(91879)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ ├─php(91880)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> │ └─php(91881)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> ├─{php}(91877)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> └─{php}(91878)</span>
设置进程名称
为了更好的区分是什么是进程,现在来引入一些还没有学习到的知识——事件回调,以及用来设置进程名称的函数 swoole_set_process_name
,下来就直接来看案例吧:
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important"><?</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">new</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">Swoole\Server</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'0.0.0.0'</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">9501</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">SWOOLE_PROCESS</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">set</span>([</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'worker_num'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// task 任务进程</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'task_worker_num'</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">]);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Connect'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fd</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Receive'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fd</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$reactorId</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$data</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 设置 task 进程后,必须调用任务回调,不然会报错</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Task'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">Swoole\Server</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">Swoole\Server\Task</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$task</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Start'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">swoole_set_process_name</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'swoole:master'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'ManagerStart'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">swoole_set_process_name</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'swoole:manager'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'WorkerStart'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$workerId</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">if</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$workerId</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">>=</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">setting</span>[<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'worker_num'</span>]) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">swoole_set_process_name</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"swoole:task worker"</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> } <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">else</span> {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">swoole_set_process_name</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"swoole:php worker"</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">on</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Close'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span>, <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fd</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">start</span>();</span>
现在为进程设置了名称,我们就来看看设置进程名称的进程情况:
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ps</span> aux | <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">grep</span> swoole</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97668</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.4 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.1 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">335168</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">27444</span> pts/1 Sl<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:50 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 swoole:master</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97669</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">115996</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">10416</span> pts/1 S<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:50 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 swoole:manager</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97673</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">118048</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">8704</span> pts/1 S<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:50 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 swoole:task worker</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97674</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">118048</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">8712</span> pts/1 S<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:50 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 swoole:task worker</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97675</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">118192</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">11460</span> pts/1 S<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:50 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 swoole:php worker</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97676</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">118192</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">11460</span> pts/1 S<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:50 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 swoole:php worker</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97677</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">118192</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">11460</span> pts/1 S<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:50 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 swoole:php worker</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">codeing <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">97682</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.0 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">13864</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">836</span> pts/2 S<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">23</span>:51 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>:00 <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">grep</span> swoole</span>
现在可以很清晰的看哪个是 master,哪个是manager等进程了。 好了,本篇文章到此结束,我是温新。