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_C 或者 PHP_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 个笔记

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

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

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

按下 CTRL+C 时,不要指望处理程序立即运行,我曾在循环中运行了一些 curl 请求,发现处理程序在响应到达或请求因超时而结束时才运行。
To Top