С помощью AzaThread вы можете обрабатывать POSIX сигналы в родительском и в дочернем процессе. В дочернем процессе всегда слушаются все доступные сигналы. В родительском это выполняется только при включенной опции $listenMasterSignals
(по умолчанию включена).
Для обработки сигнала достаточно объявить метод, который будет вызываться при его получении. Для дочернего процесса название метода равно названию сигнала (регистронезависимо). Первым аргументом этот метод получит число - код сигнала.
class ExampleThread extends Thread
{
function process()
{
// ...
}
/**
* Обработчик SIGUSR1 для дочернего процесса
*
* @param int $signo
*/
protected function sigUsr1($signo)
{
// ...
}
}
Для родительского процесса все практически также, только метод должен быть статическим и с префиксом "m".
class ExampleThread extends Thread
{
function process()
{
// ...
}
/**
* Обработчик SIGUSR2 для родительского процесса
*
* @param int $signo
*/
protected static function mSigUsr2($signo)
{
// ...
}
}
Отправлять сигналы также просто, как и получать. Для этого доступны два публичных метода: sendSignalToParent
, sendSignalToChild
. Которые отправляют сигнал родительскому и дочернему процессу соответственно.
$thread->sendSignalToChild(SIGUSR1);
$this->sendSignalToParent(SIGUSR2);