Join 4,000+ others and never miss out on new tips, tutorials, and more.
4.x is outdated, please check the latest version 22.x
Latest version:
pecl install openswoole-22.1.2
<?php Swoole\Coroutine\System::waitPid(int $pid, float $timeout = -1): array|false
The specific Linux process ID to wait for.
A float in seconds defining how long the process should wait before giving up and returning control. Because a float is used, it means that 2.5 is 2.5 seconds. Minimum value is 0.001 and the default -1 means to never time out, wait for the other process to finish.
Successful operation will return an array which will contain the child process PID, exit code and the type of kill signal that was used. Otherwise false
is returned if something went wrong.
Wait for the specified process ID to finish before continuing. This method is basically the same as Co\System::wait()
, there is more information there which you should read to understand when processes should be created when using a process inside coroutines.
You can get a specific process ID by using $process->pid
, see the example below.
If using a process within coroutines, the process should be created in the main process space first and then used within a coroutine, not the other way round, the example below shows how this can be done. So the process must be created first, this is because at low level it is very complicated to manage processes that are created within a coroutine.
<?php
use Swoole\Process;
use Swoole\Coroutine;
use Swoole\Coroutine\System;
// Creating our process outside of any coroutines, in the main process space
$process = new Swoole\Process(function()
{
echo "Hello, from a Swoole child process\n";
sleep(5);
echo "Child process exciting...\n";
});
// Process does not start until we call
$process->start();
// Entering the coroutine context
Co\run(function() use ($process)
{
// Wait using specific Linux process ID
$status = Co\System::waitPid($process->pid);
var_dump($status);
});
Output:
Hello, from a Swoole child process
Child process exciting...
array(3) {
["pid"]=>
int(10549)
["code"]=>
int(0)
["signal"]=>
int(0)
}