PHP Conference Nagoya 2025

sapi_windows_generate_ctrl_event

(PHP 7 >= 7.4.0, PHP 8)

sapi_windows_generate_ctrl_eventEnvoie un événement CTRL à un autre processus

Description

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

Envoie un événement CTRL à un autre processus dans le même groupe de processus.

Liste de paramètres

event

L'événement CTRL à envoyer; soit PHP_WINDOWS_EVENT_CTRL_C soit PHP_WINDOWS_EVENT_CTRL_BREAK.

pid

L'identifiant du processus auquel envoyer l'événement. Si 0 est donné, l'événement est envoyé à tous les processus du groupe de processus.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

Exemple #1 Utilisation basique de sapi_windows_generate_ctrl_event()

Cet exemple montre comment envoyer un événement CTRL+BREAK à un processus enfant. Dans ce cas, le processus enfant affiche I'm still alive toutes les secondes, jusqu'à ce que l'utilisateur appuie sur CTRL+BREAK, ce qui provoque l'arrêt du seul processus enfant.

<?php
// ajouter l'événement CTRL+BREAK au processus enfant
sapi_windows_set_ctrl_handler('sapi_windows_generate_ctrl_event');

// créer un processus enfant qui affiche un message toutes les secondes
$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]);
}
?>

Voir aussi

add a note

User Contributed Notes 1 note

up
1
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