Linux動機PHPで無限ループ処理をしたかったのですが、サーバーの都合上5分でプロセスがタイムアウトしてしまうので、PHPからコマンドを呼び出して、新しくPHPプロセスを立てて処理を引き継ぐことにしました。方法PHPで外部コマンドを実行するには、exec()を使います。ところで、PHPがインストールされているOSで/home/example.phpを実行するなら、次のようなコマンドを打ちますよね。2019処理中のプロセスを見ると、大量のPHPが。手元には大量のエラー通知メールが...。ここで、exec()のPHPリファレンスをもう一度よく見てみましょう。プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。ハングしてしまいます。https://www.php.net/manual/ja/function.exec.phpつまりexec()からコマンドを実行すると、子プロセスの出力があるまでこのPHPはkillされないということです。これは、exec()が返り値を待っているためでしょう。厄介なのは、この待機中のプロセスは子プロセスが終了しない限り、あらゆるタイムアウト処理を無視する点です。いつまでもプロセスに残り続け、メモリを食い続けるのです。これを防ぐためには、以下のようにします。/home/example.php)の出力を右側(ここでは/dev/null)にリダイレクトします。/dev/nullは虚無を表すスペシャルファイルで、ここを出力先に指定すると、その出力は破棄されます。&はコマンドの後ろに付けることで、バックグラウンド実行を示します。これにより、非同期でその処理を扱うことができます。まとめPHPで新しいプロセスを立ててバックグラウンド実行するには次のコマンドを使います。&');重たい処理だけバックグラウンドに逃がしたいときにも使えそうです。exec()関数などでバックグラウンドでコマンドを実行するときツイッターでシェアみんなに共有、忘れないようにメモウラルSplatoonの二次創作サイト「スプランプ」の管理人です。サーモンラン研究所やオクトチャット、フェス速報などを作りました。https://splamp.infoCrieitは個人で開発中です。どんな軽い内容でも嬉しいです。