PHP でのプロセスの開始と停止は、システムのプロセス制御関数 (プロセス制御関数) を使用して実現できます。この記事では、これらの関数を使用して、プロセスの開始、停止、終了の待機などのプロセスを制御する方法について説明します。
1. プロセスの開始
PHP でプロセスを開始するには、元のプロセスのコピーである新しいプロセスを作成する pcntl_fork() 関数を使用できます。元のプロセスと新しいプロセスは同時に実行され、if ステートメントを使用してコードに条件分岐が実装されており、この分岐を使用して元のプロセスと新しいプロセスのどちらのコードを実行するかを指定できます。
以下はサンプル コードです:
$pid = pcntl_fork(); if ($pid == -1) { // 进程创建失败 die('Could not fork.'); } else if ($pid) { // 父进程 echo "Parent process, child PID is $pid "; } else { // 子进程 echo "Child process "; exit; }
上記の例で、pcntl_fork() 関数が -1 を返した場合、プロセスの作成が失敗し、プログラムが終了することを意味します。それ以外の場合、pid が 0 の場合は、現在のプロセスが子プロセスであることを意味し、子プロセスは分岐のコードを実行して終了します。 pid が 0 でない場合、現在のプロセスが親プロセスであり、親プロセスがこのブランチのコードを実行することを意味します。
2. プロセスを停止します
PHP プロセスを停止するには、pcntl_signal() 関数と posix_kill() 関数を使用します。これらの関数を使用すると、シグナル (SIGTERM または SIGKILL) をプロセスに送信して、プロセスの実行を停止できます。 SIGTERM シグナルはプロセスを正常に終了させることができますが、SIGKILL シグナルはプロセスを強制的に終了し、プロセスが終了する前にクリーンアップしません。
サンプル コードは次のとおりです:
// 停止进程 posix_kill($pid, SIGTERM); // 优雅地停止进程 // posix_kill($pid, SIGKILL); // 强制停止进程
もちろん、ここでは、$pid が終了する必要があるプロセスの正しいプロセス ID であることを確認する必要があります。
3. プロセスが終了するのを待ちます
子プロセスを開始するとき、親プロセスは通常、子プロセスが作業を完了するまで待ちます。したがって、pcntl_waitpid() 関数を使用する必要があります。この関数は、指定された PID を持つプロセスが終了するのを待ちます。プロセスがすでに終了している場合、関数はすぐに戻ります。
以下はサンプル コードです:
// 等待进程结束 $child_pid = pcntl_waitpid($pid, $status); // 检查进程是否成功退出 if (pcntl_wifexited($status)) { echo "子进程 $child_pid 成功退出,并返回状态码: " . pcntl_wexitstatus($status) . " "; }
上記の例では、子プロセスが終了すると、pcntl_waitpid() は子プロセスの PID と終了ステータスを $status 変数に保存します。 。その後、pcntl_wifexited() 関数はプロセスが正常に終了したかどうかを確認してブール値を返し、pcntl_wexitstatus() 関数はプロセスの終了ステータスを返します。
概要
この記事では、PHP のプロセス制御関数を使用してプロセスを開始、停止、待機する方法を紹介しました。これらの関数は、同時処理をより適切に管理し、PHP プログラムをより効率的かつ強力にするのに役立ちます。同時に、PCNTL 拡張機能を使用する場合は、セキュリティのベスト プラクティスに注意して従う必要があることに注意してください。
以上がPHPでプロセスを開始および停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。