実行したいスクリプトがあります。
php ./Script.php &
ジョブはバックグラウンドに切り替えられましたが停止しました。 bgを使用して実行しようとすると停止し続けます。
$ jobs
[1]+ Stopped php ./Script.php
$ bg
[1]+ php ./Script.php &
[1]+ Stopped php ./Script.php
$
ps は、ジョブの状態が T であることを示します。
$ ps ax | grep Script
951 pts/5 T 0:00 php ./Script.php
cat /proc/PID/wchan は「pipe_wait」を表示します。
修正する:
これはすべてのPHPスクリプトで発生する可能性があります<?php sleep(1000)
。
修正する:
すべての素晴らしい回答とコメントに感謝します。技術レベルでこれが起こる理由を理解していますが、特定のPHPバージョンでこれらの現象がどのように発生するのかわかりません。しかし、これは* nixの問題ではありません。
答え1
このコマンドは、端末がフォアグラウンド・プロセス・グループに属していないときに端末からデータを読み取ることをほぼ確実に試みます。これにより、カーネルは SIGTTIN をプロセスに送信し、デフォルトでプロセスを停止します。簡単なテストはstdinを/ dev / nullにリダイレクトすることです。プロセスが停止せずにバックグラウンドで実行されている場合、問題は上記のSIGTTINです。
答え2
端末(または標準入力)入力が実際に必要でない場合は、次のことができます。
php ./Script.php </dev/null &