Search by

phpgt / daemon

g105b

There is no license information available for the latest version (v1.1.7) of this package.

Background script execution with cross-platform compatible streaming.

Package info

github.com/PhpGt/Daemon

Issues

pkg:composer/phpgt/daemon

Fund package maintenance!

phpgt

Statistics

Installs: 14 895

Dependents: 4

Suggesters: 0

Stars: 0

v1.1.7 2026-07-10 09:53 UTC

This package is auto-updated.

Last update: 2026-11-11 11:12:48 UTC


README

Execute background processes asynchronously using an object oriented process pool.

Build status Code quality Code coverage Current version PHP.G/Daemon documentation

Example usage

<?php
use GT\Daemon\Process;
use GT\Daemon\Pool;

// Create three long-running processes:
$pingProcess = new Process("ping google.com");
$infiniteProcess = new Process("while true; do echo 'background...'; sleep 3; done");
$dateProcess = new Process("while true; do echo $(date -d now); sleep 2; done");

// Add all three processes to a pool:
$pool = new Pool();
$pool->add("Ping", $pingProcess);
$pool->add("Loop", $infiniteProcess);
$pool->add("Date", $dateProcess);

// Start the execution of all processes:
$pool->exec();

// While processes are running, write their output to the terminal:
do {
	echo $pool->read();
	// Sleep to avoid hogging the CPU.
	sleep(1);
}
while($pool->numRunning() > 0);

Outputs something similar to:

[Ping] PING google.com (172.217.169.78) 56(84) bytes of data.
[Ping] 64 bytes from lhr48s09-in-f14.1e100.net (172.217.169.78): icmp_seq=1 ttl=52 time=8.78 ms
[Loop] background...
[Date] Mon 19 Aug 09:58:54 BST 2019
[Ping] 64 bytes from lhr48s09-in-f14.1e100.net (172.217.169.78): icmp_seq=2 ttl=52 time=8.75 ms
[Ping] 64 bytes from lhr48s09-in-f14.1e100.net (172.217.169.78): icmp_seq=3 ttl=52 time=8.75 ms
[Date] Mon 19 Aug 09:58:56 BST 2019
[Ping] 64 bytes from lhr48s09-in-f14.1e100.net (172.217.169.78): icmp_seq=4 ttl=52 time=8.75 ms
[Loop] background...
[Ping] 64 bytes from lhr48s09-in-f14.1e100.net (172.217.169.78): icmp_seq=5 ttl=52 time=8.80 ms
[Date] Mon 19 Aug 09:58:58 BST 2019

Notice how the date process is only set to loop three times, and after it is complete the other two infinite processes continue to run.

Automatically restarting workers

ContinuousPool extends Pool with a non-blocking tick() method and a configurable restart delay (one second by default). Use isActive() for the supervising loop: numRunning() can be zero while completed workers wait to restart. close() cancels restarts before stopping workers, and unread output is retained across executions.

See the ContinuousPool documentation for a complete example and lifecycle details.

Proudly sponsored by

JetBrains Open Source sponsorship program

JetBrains logo.