やったこと

webサービスを作るときに考えたことを垂れ流します

phpのexecコマンドではまりまくった件

phpのexecコマンドではまってしまった・・。

下記のようにexecを使って別プロセスで「test.php」の処理を実行しようと思ったんだけど、処理がexecの箇所でwaitしてしまって処理2の実行が待たされてしまう(ブロッキング的な動作)

処理1・・・
$command = 'nohup php /hoge/test.php > /dev/null 2>&1';
exec($command);
処理2・・・

自分的にはバックグラウンドで「test.php」をキックしてすぐ処理2に移るノンブロッキングっぽい動作をしてほしいので、どうしたらいいのか考え込んでしまった。

しばらく画面を凝視してて、コマンドに一文字足りないことに気付いた。ケツに「&」がない!

ケツに「&」を付けるということはすなわち、コマンドをバックグラウンドで実行するということを意味する。

つまり下記のようなコードが正しい。

処理1・・・
$command = 'nohup php /hoge/test.php > /dev/null 2>&1 &';
exec($command);
処理2・・・

これで無事にノンブロッキングな動作で動かすことできた。
コマンドの意味をちゃんと覚えておかないからこういうことになるんだよな。とほほ・・。