バックエンドではこのようなシナリオがよくあります。特定のスクリプトを繰り返し実行する必要があります。現時点では、継続的かつ自動的にプルアップしてくれるデーモンを用意するのが最善です。これらのスクリプト プロセスにより、スクリプトを繰り返し自動的に実行できます。
Swooleのプロセス管理モジュールは、子プロセスの自動再起動機能を実現できるプロセス間通信機能を提供します。 swoole では、プロセス デーモンを通じて常駐プロセスを実装できます。
サブプログラムの保護を実現するには、次の 2 つのことを行う必要があります:
1. プログラムは、新しいサブプロセスを再開するために、サブプロセスの終了シグナルをリッスンする必要があります。 . .
2. 子プロセスの実行環境は、親プロセスから独立している必要があります。
swoole プロセス管理モジュールは bool Process->exec(string $execfile, array $args) メソッドを提供します。これにより、子プロセスが別のシステム コール プログラムに変換できると同時に、親プロセスが現在のプロセスと一致しており、依然として親子プロセス関係にあります。
次に、array Process::wait(bool $blocking = true) メソッドを使用して、子プロセスの終了シグナルを待ちます。
以下は、swoole を使用してサブプロセスを開始し、サブプロセス リソースをリサイクルするサンプル コードです:
<?phpuse Swoole\Process; $php = "/usr/bin/env php"; $script = dirname(__DIR__) . "/task.php"; $command = "{$php} {$script}"; $process = new Process(function (Process $worker) use ($command) { $worker->exec('/bin/sh', ['-c', $command]); }); $pid = $process->start(); printf("启动子进程 {$pid}\n");while ($ret = Process::wait()) { $pid = intval($ret["pid"] ?? 0); printf("子进程 {$pid} 结束\n"); }
コード分析:
$コマンド変数は、サブプロセス スクリプトが必要であることを示しています、 exec () メソッドを使用してサブプロセスとして実行を開始し、Process::wait() を使用して $command サブプロセス スクリプトが終了してプロセス リソースをリサイクルするのを待ちます。
そして、サブプロセスの終了シグナルを受け取った後に同じサブプロセススクリプトを起動すれば、サブプロセスのガーディアンシップを実現することができます。したがって、子プロセスを保護する最初のプログラム実装コード:
<?php use Swoole\Process; $php = "/usr/bin/env php"; $script = dirname(__DIR__) . "/task.php"; $command = "{$php} {$script}"; do { $process = new Process(function (Process $worker) use ($command) { $worker->exec('/bin/sh', ['-c', $command]); }); $pid = $process->start(); printf("启动子进程 {$pid}\n"); } while (Process::wait());
コード分析:
このコードは、子プロセスを開始するロジックを無限ループに追加するだけです。プロセス スクリプトは継続的に再起動できます。
推奨学習: swoole ビデオ チュートリアル
以上がプロセス中にウールがどのように存在するかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。