sapi_windows_generate_ctrl_event
(PHP 7 >= 7.4.0)
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
イベントを子プロセスに送信する方法を示しています。
この場合、ユーザーが CTRL+BREAK
を押すまで、
子プロセスは I'm still alive
を1秒ごとに表示します。
CTRL+BREAK
は、子プロセスのみを終了させます。
<?php// CTRL+BREAK イベントを子プロセスに送信するsapi_windows_set_ctrl_handler('sapi_windows_generate_ctrl_event');// 1秒ごとに echo する子プロセスを生成$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]);}?>
参考
- proc_open() - コマンドを実行し、入出力用にファイルポインタを開く
- sapi_windows_set_ctrl_handler() - CTRLイベント のハンドラを設定したり削除したりする