PHPのexec関数でnohupコマンドを実行しても非同期処理にならない

かなりハマったのでメモ

以下のコマンドをphpのexec関数で実行しても非同期処理にならない

しかし、リダイレクトして標準出力を捨てると非同期処理が可能になる

かなり悩んだが、PHP公式のexec関数を見たら書いてあった

注意:

プログラムがこの関数で始まる場合、 バックグラウンドで処理を続けさせるには、 プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。 そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。

PHP公式
https://www.php.net/manual/ja/function.exec.php

つまりexec関数でnohup &を実行しても非同期にならず、

> /dev/null 2>&1 でリダイレクトさせてはじめて非同期通信になっていたようだ。

ハマった時は公式に戻ろう