swoole父进程和子进程之间通信的例子

Posted tochw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swoole父进程和子进程之间通信的例子相关的知识,希望对你有一定的参考价值。

<?php
/**
这是一个swoole父进程和子进程之间通信的例子
*/
//进程创建成功后回调处理
function handle(swoole_process $worker){
    //从进程管道中读取数据
    $data = $worker->read();
    echo PHP_EOL."from master: {$data}";
    //向进程管道中写入数据
    $pipe = $worker->pipe;//子进程的管道编号
    $pid = $worker->pid;//子进程的PID
    $worker->write("hello master, this pipe is {$pipe}, pid is {$pid}");
    sleep(2);
    $worker->exit(0);
}

//进程数量
$worker_num = 2;
//重定向输入输出
$redirect_stdin_stdout = false;
//存放进程的数组
$workers = [];
//循环创建多进程
for($i=0; $i<$worker_num; $i++){
    //创建进程
    $process = new swoole_process("handle", $redirect_stdin_stdout);
    //启动进程
    $pid = $process->start();
    //保存进程句柄
    $workers[$pid] = $process;
}

//主进程
foreach($workers as $pid=>$process){
    //子进程句柄向自己的管道中写入数据
    $process->write("hello worker, this pid is {$pid}");
    //子进程句柄从自己的管道中读取数据
    $data = $process->read();
    echo PHP_EOL."from worker: {$data}".PHP_EOL;
}  

  


from master: hello worker, this pid is 59673
from worker: hello master, this pipe is 3, pid is 59673

from master: hello worker, this pid is 59675
from worker: hello master, this pipe is 7, pid is 59675

参考https://www.jianshu.com/p/f89d5ca7b29d

 子进程的编号pid,可以通过ssh控制台的top命令直接可以看到。

技术图片

 

以上是关于swoole父进程和子进程之间通信的例子的主要内容,如果未能解决你的问题,请参考以下文章

使用管道在父进程和子进程之间进行通信的问题

在 C++ 中父进程和子进程之间共享队列

C linux中子进程与父进程之间的通信:父进程不阻塞

swoole进程间如何通信

进程间通信

如何让父进程和子进程相互监听?