sapi_windows_generate_ctrl_event

(PHP 7 >= 7.4.0, PHP 8)

sapi_windows_generate_ctrl_eventEnvía un evento CTRL a otro proceso

Descripción

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

Envía un evento CTRL a otro proceso en el mismo grupo de procesos.

Parámetros

event

El evento CTRL a enviar; puede ser PHP_WINDOWS_EVENT_CTRL_C o PHP_WINDOWS_EVENT_CTRL_BREAK.

pid

El identificador del proceso al cual enviar el evento. Si se proporciona 0, el evento se envía a todos los procesos del grupo de procesos.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Uso básico de sapi_windows_generate_ctrl_event()

Este ejemplo muestra cómo enviar un evento CTRL+BREAK a un proceso hijo. En este caso, el proceso hijo muestra I'm still alive cada segundo, hasta que el usuario presiona CTRL+BREAK, lo que provoca la detención del proceso hijo.

<?php
// agregar el evento CTRL+BREAK al proceso hijo
sapi_windows_set_ctrl_handler('sapi_windows_generate_ctrl_event');

// crear un proceso hijo que muestra un mensaje cada segundo
$cmd = ['php', '-r', 'while (true) { echo "I\'m still alive\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]);
}
?>

Ver también

add a note

User Contributed Notes 1 note

up
1
Michael Q
4 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