sapi_windows_generate_ctrl_event

(PHP 7 >= 7.4.0, PHP 8)

sapi_windows_generate_ctrl_eventПослать событие CTRL другому процессу

Описание

sapi_windows_generate_ctrl_event(int $event, int $pid = 0): bool

Послать событие CTRL другому процессу в той же группе процессов.

Список параметров

event

Событие CTRL; PHP_WINDOWS_EVENT_CTRL_C или PHP_WINDOWS_EVENT_CTRL_BREAK.

pid

Идентификатор процесса, которому необходимо послать событие. Если задано как 0, то событие будет послано всем процессам в группе.

Возвращаемые значения

Возвращает true в случае успешного завершения или false в случае возникновения ошибки.

Примеры

Пример #1 Использование sapi_windows_generate_ctrl_event()

В этом примере показано, как послать события CTRL+BREAK дочернему процессу. В данном случае дочерний процесс будет печатать Я всё ещё жив! раз в секунду, пока пользователь не нажмёт CTRL+BREAK. После этого дочерний процесс завершится.

<?php
// Пересылка событий CTRL+BREAK дочернему процессу
sapi_windows_set_ctrl_handler('sapi_windows_generate_ctrl_event');

// Создаём дочерний процесс
$cmd = ['php''-r''while (true) { echo "Я всё ещё жив!\n"; sleep(1); }'];
$descspec = array(['pipe''r'], ['pipe''w'], ['pipe''w']);
$options = ['create_process_group' => true];
$proc proc_open($cmd$descspec$pipesnullnull$options);
while (
true) {
    echo 
fgets($pipes[1]);
}
?>

Смотрите также

  • proc_open() - Выполнить команду и открыть указатель на файл для ввода/вывода
  • sapi_windows_set_ctrl_handler() - Установить или удалить обработчик события CTRL
add a note add a note

User Contributed Notes 1 note

up
0
Michael Q
3 years ago
This function may produce a Warning:

sapi_windows_set_ctrl_handler(): CTRL events trapping is only supported on console in script.php..

It happens when script is started by "php-cgi.exe", so "php.exe -q" should be used instead.

While pressing CTRL+C don't expect the handler to run instantly, i've ran some curl request in a loop and found that handler runs when either response arrives or request finishes by timeout.
To Top