slince/process

基于 pcntl 和 posix 的进程包装器和进程管理器。

1.0.0 2017-04-28 08:25 UTC

This package is auto-updated.

Last update: 2024-09-13 17:36:54 UTC


README

Build Status Coverage Status Total Downloads Latest Stable Version Scrutinizer

该库帮助处理进程。它提供了更易读的 API 和通过管道(FIFO)和系统 V 的多种 IPC 模式。

安装

通过 composer 安装

composer require slince/process

依赖项

该库依赖于以下 PHP 扩展。

  • ext-pcntl. 提供进程控制(必须)
  • ext-sysvshm. 提供系统 V 共享内存(可选)
  • ext-sysvsem. 提供系统 V 信号量(可选)
  • ext-sysmsg. 提供系统 V 消息队列(可选)

使用方法

基本使用

$process = new Slince\Process\Process(function(){
    echo 'hello, my pid is ' . getmypid();
});
$process->start();

var_dump($process->isRunning()); // echo true
var_dump($process->getPid()); // will output the pid of child process
//do something other

$process->wait(); //waiting for the process to exit 

向进程发送信号

注意:如果您的 PHP 版本小于 7.1,请在文件开头添加语句 declare(ticks=1);

$process = new Slince\Process\Process(function(){
    Slince\Process\Process::current()->signal([SIGUSR1, SIGUSR2], function(){
        echo 'trigger signal';
    });
    echo 'hello, my pid is ' . getmypid();
});
$process->start();
$process->signal(SIGUSER1);
//do something
$process->wait();

共享内存

$memory = new Slince\Process\SystemV\SharedMemory();
$memory->set('foo', 'bar');
var_dump($memory->get('foo'));

共享内存的默认大小为 php.ini 中的 sysvshm.init_mem,否则为 10000 字节。您可以调整此值。

$memory = new Slince\Process\SystemV\SharedMemory(__FILE__, '5M'); //Adjusts to 5m

信号量

$semaphore = new Slince\Process\SystemV\Semaphore();
$semaphore->acquire(); //Acquires a lock
// do something
$semaphore->release() //Releases a lock

消息队列

$queue  = new Slince\Process\SystemV\MessageQueue();
$queue->send('hello');
echo $queue->receive(); //Will output hello

FIFO

$writeFifo = new Slince\Process\Pipe\WritableFifo('/tmp/test.pipe');
$writeFifo->write('some message');
$readFifo = new Slince\Process\Pipe\ReadableFifo('/tmp/test.pipe');
echo $readFifo->read();

许可证

MIT 许可证。见 MIT