Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPのプロセス制御について

Avatar for Haruki Tazoe Haruki Tazoe
July 26, 2025
10

 PHPのプロセス制御について

Avatar for Haruki Tazoe

Haruki Tazoe

July 26, 2025
Tweet

Transcript

  1. タスクの実行 1. 各$task を順番に処理 2. 現在のプロセス数が上限を超えている場合は待機 waitForChild(); や checkTimeouts(); 3.

    pcntl_fork(); で子プロセスを生成 - 子プロセス:$task->execute(); を実行し、終了 - 親プロセス:子プロセスの PID を記録 4. すべての子プロセスが終了するまで監視 monitorProcesses();
  2. プロセスの待機 - waitForChild(); - 非同期で子プロセスの終了を待つ - 終了したらリストから削除 - 終了したプロセスがなければsleep(1); で1秒待機

    - checkTimeouts(); - それぞれの子プロセスの実行時間を確認 - タイムアウト時間を過ぎていたらSTDERR に警告を出力 - ただし、プロセスの終了やkillはここではしない
  3. プロセスの監視 - monitorProcesses(); - 実行時間に応じてアラートを出す: 10秒超 → 黄色 20秒超 →

    マゼンタ 30秒超 → 赤色 + 強制終了 posix_kill(); - pcntl_waitpid(); で終了した子プロセスを回収・削除
  4. リトライとバックオフ - リトライ - 失敗した処理をもう一度やり直す - 一時的な失敗(タイムアウト、接続エラー、リソースの過負荷) に対して、再試行する - バックオフ

    - リトライをすぐには行わず、時間をおいてから行うこと - サーバーや処理対象が一時的に混み合っている/不安定な時に 少し時間を開けて再試行することで成功率を上げる - 短時間で何度もアクセスしてサーバーをさらに重くしないようにする (所謂DoSを防ぐ)
  5. 自己紹介 - 名前・所属 - 田添春樹 / @jdkfx - 株式会社GoQSystem -

    よく使う技術 ( 使っていた技術 ) - PHP, JavaScript, Vue.js, Svelte … - PHPとは学生時代に出会う - 個人開発や自作フレームワークの制作 - 最近はAWSにハマってる