此函数可能会产生警告
sapi_windows_set_ctrl_handler(): 仅在控制台中支持脚本中的CTRL事件捕获。script.php..
当脚本由“php-cgi.exe”启动时发生这种情况,因此应改用“php.exe -q”。
按下CTRL+C时,不要期望处理程序立即运行,我循环运行了一些curl请求,发现处理程序在响应到达或请求超时完成时运行。
(PHP 7 >= 7.4.0, PHP 8)
sapi_windows_generate_ctrl_event — 向另一个进程发送CTRL事件
event
要发送的CTRL
事件;PHP_WINDOWS_EVENT_CTRL_C
或PHP_WINDOWS_EVENT_CTRL_BREAK
。
pid
要发送事件到的进程的ID。如果给出0
,则将事件发送到进程组的所有进程。
示例 #1 基本 sapi_windows_generate_ctrl_event() 用法
此示例演示如何将CTRL+BREAK
事件传递给子进程。在这种情况下,子进程每秒钟回显I'm still alive
,直到用户按下CTRL+BREAK
,这只会导致子进程终止。
<?php
// 将CTRL+BREAK事件转发到子进程
sapi_windows_set_ctrl_handler('sapi_windows_generate_ctrl_event');
// 创建一个每秒回显的子进程
$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]);
}
?>