Process library
The library help to work with processes. It provides a more readable api and various modes for IPC via pipe(FIFO) and system v.
Installation
Install via composer
composer require slince/processDependencies
The library replies on the following php's extension.
- ext-pcntl. Provides control processes (MUST)
- ext-sysvshm. Porvides system v shared memory (OPTIONAL)
- ext-sysvsem. Porvides system v semaphore (OPTIONAL)
- ext-sysmsg. Porvides system v message queue (OPTIONAL)
Usage
Basic usage
$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 Sends signal to the process
Note: If your php version is less than 7.1, please add the statement
declare(ticks=1);at the beginning of the file:
$process = new Slince\Process\Process(function(){
echo 'hello, my pid is ' . getmypid();
});
$process->getSignalHandler()->register([SIGUSR1, SIGUSR2], function(){
echo 'trigger signal';
});
$process->start();
$process->signal(SIGUSER1);
//do something
$process->wait();Shared memory
$memory = new Slince\Process\SystemV\SharedMemory();
$memory->set('foo', 'bar');
var_dump($memory->get('foo'));The default size of shared memory is the sysvshm.init_mem in the php.ini, otherwise 10000 bytes. You can adjust this.
$memory = new Slince\Process\SystemV\SharedMemory(__FILE__, '5M'); //Adjusts to 5mSemaphore
$semaphore = new Slince\Process\SystemV\Semaphore();
$semaphore->acquire(); //Acquires a lock
// do something
$semaphore->release() //Releases a lockMessage queue
$queue = new Slince\Process\SystemV\MessageQueue();
$queue->send('hello');
echo $queue->receive(); //Will output helloFifo
$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();Fifo works with half duplex mode. You can use DuplexFifo that will create two fifos.
$fifo = new Slince\Process\Pipe\DuplexFifo('/tmp/test.pipe');
$fifo->write('some message');
$fifo->read();

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
