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 事件傳遞給子處理程序。在這種情況下,子處理程序會每秒輸出 我還活著,直到使用者按下 CTRL+BREAK,這只會導致子處理程序終止。

<?php
// 將 CTRL+BREAK 事件轉發給子處理程序
sapi_windows_set_ctrl_handler('sapi_windows_generate_ctrl_event');

// 建立一個每秒輸出的子處理程序
$cmd = ['php', '-r', 'while (true) { echo "我還活著\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(): 在 script.php 中,CTRL 事件捕捉僅在控制台中支援。

當腳本由 "php-cgi.exe" 啟動時會發生這種情況,因此應該使用 "php.exe -q" 來代替。

按下 CTRL+C 時,不要期望處理程式會立即運行,我在迴圈中運行了一些 curl 請求,發現處理程式會在收到回應或請求因逾時而完成時運行。
To Top