関数passthru()
はシェルを生成してコマンドを実行し、パススルー プロセスが戻るまでブロックします。これらは、スクリプトを実行する PHP インタープリターとは異なるプロセス ID を持つ独立したプロセスです。スクリプトを強制終了できますが、スクリプトが開始したプロセスを強制終了することはできません。
ただし、生成されたプロセスには同じプロセス グループ ID (PGID) があり、それを使用してプロセスを強制終了したり、他のシグナルを送信したりできます。この場合の PGID は、php スクリプトのプロセス ID (PID) と同じです。
PGID を表示するには、コマンド ps axjf を実行すると、次のような結果が得られます。
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
24077 12484 12484 24077 pts/9 12484 S+ 1000 0:00 | \_ php sleepScript.php
12484 12486 12484 24077 pts/9 12484 S+ 1000 0:00 | \_ sh -c sleep 500
12486 12487 12484 24077 pts/9 12484 S+ 1000 0:00 | \_ sleep 500
この例の PGID は 12484 (php スクリプトの PID と同じ) であり、そのグループに終了シグナルを送信するには、PGID の前にマイナス記号を付けて kill コマンドを使用します。
kill -15 -24077
これで、3 つのプロセスすべてが終了します。