swoole process 单进程

1 编写代码

<?php
class Process
{
public $process = null;

public function __construct()
{
/**
* 实例化进程管理对象
* 参数一,callable $function 子进程创建成功后要执行的函数
* 参数二,是否将结果放入进程管道中 false为直接输出
*/
$this->process = new Swoole\Process([$this, 'onProcess'], false);
// 获取子进程id
$pid = $this->getPid();
echo $pid;

// 回收结束运行的子进程
Swoole\Process::wait();
}

/**
* 创建子进程
* @param Process $pro 进程管理对象
*/
public function onProcess($pro)
{
// 执行外部程序 开启http
$pro->exec('/usr/bin/php', [__DIR__. '/../server/Http.class.php']);
}

/**
* 返回子进程id
* @return mixed
*/
public function getPid()
{
return $this->process->start();
}
}
new Process();

2 执行命令

执行命令 php Process.php

[root@VM-0-15-centos process]# php Process.php 
6935

注:返回的 6935 是子进程id,就是代码中开启的 http 的进程id。

3 查看进程

再通过 ps 命令,查看 Process.php 程序本身的进程

[root@VM-0-15-centos process]# ps aux | grep Process.class.php 
root 6934 0.0 0.7 257076 14116 pts/4 S+ 14:48 0:00 php Process.class.php
root 7104 0.0 0.0 112812 980 pts/3 R+ 14:48 0:00 grep --color=auto Process.class.php

注:这里的 6934 就是 Process.php 程序本身的进程。

最后通过 pstree 命令查看这些进程之间的关系

[root@VM-0-15-centos process]# pstree -p 6934
php(6934)───php(6935)─┬─php(6936)─┬─php(6938)
│ ├─php(6939)
│ ├─php(6940)
│ ├─php(6941)
│ ├─php(6942)
│ ├─php(6943)
│ ├─php(6944)
│ └─php(6945)
└─{php}(6937)

注:
— 6934: Process.php
— 6935: Http.class.php (Master 进程)
— 6936: (Manager 进程)
— 6938 - 6945: (Worker / Task 进程)
— 6937: (Reactor 线程)

相关推荐

  • 获取指定目录下的所有图片信息

    1 获取指定目录下的所有图片信息// 获取指定目录下的所有图片信息 public function getImagesInfo($directory) { $images = []; // 创建递归目录迭代器 $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($directory, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY ); // 遍历目录中的每个文件 foreach (

  • Thinkphp各版本的PHP要求

    ThinkPHP 8.0:运行环境要求PHP8.0+,兼容PHP8.3ThinkPHP 6.1:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 6.0:运行环境要求PHP7.2+,兼容PHP8.1ThinkPHP 5.1:运行环境要求PHP5.6+,兼容PHP8.0ThinkPHP 5.0:运行环境要求PHP5.4+,兼容PHP7.3

  • Thinkphp5.1路径常量

    1 配置文件位置根目录/config/template.php2 配置文件内容&lt;?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reser

  • Thinkphp5.0路径常量

    1 配置文件位置根目录/application/模块名/config.php2 配置文件内容&lt;?php//配置文件return [ // 后台视图输出字符串内容替换 'view_replace_str' =&gt; [ '__PUBLIC__' =&gt; '/', '__STATIC__' =&gt; '/static', '__CONSOLE__' =&gt; '/static/console', '__CONSOLE_CSS__' =&gt; '/static/console/css', '__CONSOLE_IMAGES__' =&gt; '/static/console/ima

  • wp站点防止别人进行DDOS攻击

    1 简介wp站点防止别人进行DDOS攻击。2 配置位置位置:根目录/wp-config.php3 配置内容在【根目录/wp-config.php】文件的开头添加如下代码:if(strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false){ $protocol = $_SERVER['SERVER_PROTOCOL'] ?? ''; if(!in_array($protocol, ['HTTP/1.1', 'HTTP/2', 'HTTP/2.0', 'HTTP/3'], true)){ $protocol = 'HTTP/1.0'; } hea

  • 只读属性

    1 只读属性简介只读属性的声明方式类似于普通属性,但需要使用 readonly 关键字。2 只读属性例子class Point { public readonly float $x; public readonly float $y; public function __construct(float $x, float $y) { $this-&gt;x = $x; $this-&gt;y = $y; }}$point = new Point(3.5, 2.8);echo $point-&gt;x; // 输出: 3.5echo $point-&gt;y; // 输出: 2.8// 下面的尝