PHP Conference Japan 2024

sapi_windows_generate_ctrl_event

(PHP 7 >= 7.4.0, PHP 8)

sapi_windows_generate_ctrl_event向另一个进程发送CTRL事件

描述

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

向同一进程组中的另一个进程发送CTRL事件。

参数

event

要发送的CTRL事件;PHP_WINDOWS_EVENT_CTRL_CPHP_WINDOWS_EVENT_CTRL_BREAK

pid

要发送事件到的进程的ID。如果给出0,则将事件发送到进程组的所有进程。

返回值

成功时返回true,失败时返回false

范例

示例 #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]);
}
?>

参见

添加备注

用户贡献备注 1 条备注

Michael Q
3 年前
此函数可能会产生警告

sapi_windows_set_ctrl_handler(): 仅在控制台中支持脚本中的CTRL事件捕获。script.php..

当脚本由“php-cgi.exe”启动时发生这种情况,因此应改用“php.exe -q”。

按下CTRL+C时,不要期望处理程序立即运行,我循环运行了一些curl请求,发现处理程序在响应到达或请求超时完成时运行。
To Top