swoole —— process

  • 创建进程
  • 进程间通信
    • 管道
    • 队列
    • 信号
  • 其他
    • 执行系统命令
    • 回收
    • 守护进程
    • 命名进程
    • CPU亲和性

swoole_process

swoole的进程对比pcntl扩展进程的优势:

  • pcntl无法用在fpm/apache
  • pcntl没有提供进程间通信的功能
  • pcntl不支持重定向标准输入和输出
  • pcntl只提供了fork这样原始的接口,容易使用错误
  • swoole_process提供了比pcntl更强大的功能,更易用的API,使PHP在多进程编程方面更加轻松。

创建进程

原型:

参数:

  • function: 子进程创建成功后要执行的函数
  • redirect_stdin_stdout: 重定向子进程的标准输入和输出。 启用此选项后,在进程内echo将不是打印屏幕,而是写入到管道。读取键盘输入将变为从管道中读取数据。 默认为阻塞读取。
  • create_pipe: 是否创建管道,启用redirect_stdin_stdout后,此选项将忽略用户参数,强制为true 如果子进程内没有进程间通信,可以设置为false

返回值:

swoole_process对象,数据结构包括了管道描述符和回调函数。

进程间通信

管道

当创建进程时,进行了输入输出重定向,swoole就会帮我们自动创建管道。

这里运行程序并不会输出process: echo 1。因为输出意见被输入到管道中去了。

这里我们关闭输出输入重定向,并且开启管道。进行一个简单的案例说明:

队列

信号

父进程中注册信号(子进程被kill触发),自进程中注册信号(本身被kill触发)。

开启子进程后,父进程立即杀死子进程,触发子进程信号事件。子进程关闭后,触发父进程信号事件。

其他

执行系统命令

会输出 ps -ef执行后内容。

回收

子进程结束必须要执行wait进行回收,否则子进程会变成僵尸进程

守护进程

使当前进程脱变为一个守护进程。

命名进程

CPU亲和性

设置CPU亲和性,可以将进程绑定到特定的CPU核上。