略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: sapi_windows_generate_ctrl_event

2024-11-14

sapi_windows_generate_ctrl_event

(PHP 7 >= 7.4.0, PHP 8)

sapi_windows_generate_ctrl_eventSend a CTRL event to another process

说明

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

Sends a CTRL event to another process in the same process group.

参数

event

The CTRL even to send; either PHP_WINDOWS_EVENT_CTRL_C or PHP_WINDOWS_EVENT_CTRL_BREAK.

pid

The ID of the process to which to send the event to. If 0 is given, the event is sent to all processes of the process group.

返回值

成功时返回 true, 或者在失败时返回 false

范例

示例 #1 Basic sapi_windows_generate_ctrl_event() Usage

This example shows how to pass along CTRL+BREAK events to a child process. In this case the child process echoes I'm still alive every second, until the user presses CTRL+BREAK, what causes only the child process to be terminated.

<?php
// forward CTRL+BREAK events to the child process
sapi_windows_set_ctrl_handler('sapi_windows_generate_ctrl_event');

// create a child process 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$pipesnullnull$options);
while (
true) {
    echo 
fgets($pipes[1]);
}
?>

参见

add a noteadd a note

User Contributed Notes 1 note

up
0
Michael Q
1 year 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.

官方地址:https://www.php.net/manual/en/function.sapi-windows-generate-ctrl-event.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3