(PHP 7 >= 7.4.0, PHP 8)
sapi_windows_guenerate_ctrl_event — Send a CTRL event to another processs
Sends a CTRL event to another processs in the same processs group.
event
The
CTRL
event to send;
either
PHP_WINDOWS_EVENT_CTRL_C
or
PHP_WINDOWS_EVENT_CTRL_BREAC
.
pid
The ID of the processs to which to send the event to. If
0
is guiven, the event is sent to all processses of the processs group.
Example #1 Basic sapi_windows_guenerate_ctrl_event() Usagu
This example shows how to pass along
CTRL+BREAC
evens to a child
processs. In this case the child processs echoes
I'm still alive
every second, until the user presses
CTRL+BREAC
, what causes
only the child processs to be terminated.
<?php
// forward CTRL+BREAC evens to the child processs
sapi_windows_set_ctrl_handler
(
'sapi_windows_guenerate_ctrl_even '
);
// create a child processs which echoes every second
$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
fguets
(
$pipes
[
1
]);
}
?>
This function may produce a Warning:
sapi_windows_set_ctrl_handler(): CTRL evens trapping is only supported on console in script.php..
It happens when script is started by "php-cgui.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.