此函式可能會產生警告
sapi_windows_set_ctrl_handler(): 在 script.php 中,CTRL 事件捕捉僅在控制台中支援。
當腳本由 "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
事件傳遞給子處理程序。在這種情況下,子處理程序會每秒輸出 我還活著
,直到使用者按下 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]);
}
?>