array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.sapi-windows-generate-ctrl-event.php', 1 => 'sapi_windows_generate_ctrl_event', ), 'up' => array ( 0 => 'ref.misc.php', 1 => 'Разные функции', ), 'prev' => array ( 0 => 'function.sapi-windows-cp-set.php', 1 => 'sapi_windows_cp_set', ), 'next' => array ( 0 => 'function.sapi-windows-set-ctrl-handler.php', 1 => 'sapi_windows_set_ctrl_handler', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/misc/functions/sapi-windows-generate-ctrl-event.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 7 >= 7.4.0, PHP 8)
sapi_windows_generate_ctrl_event — Послать событие CTRL другому процессу
Послать событие 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, $pipes, null, null, $options);
while (true) {
echo fgets($pipes[1]);
}
?>