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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Haruki Tazoe Haruki Tazoe
July 26, 2025
48

 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にハマってる