Skip to content

Latest commit

 

History

History
77 lines (55 loc) · 2.52 KB

5.Signals.md

File metadata and controls

77 lines (55 loc) · 2.52 KB

Обработка POSIX сигналов в дочернем и родительском процессе


  1. Общая информация
  2. Отправка сигналов

1 - Общая информация

С помощью 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)
	{
		// ...
	}
}

2 - Отправка сигналов

Отправлять сигналы также просто, как и получать. Для этого доступны два публичных метода: sendSignalToParent, sendSignalToChild. Которые отправляют сигнал родительскому и дочернему процессу соответственно.

$thread->sendSignalToChild(SIGUSR1);
$this->sendSignalToParent(SIGUSR2);