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 线程)