ジョブがバックグラウンドで実行されるのを防ぐには?

ジョブがバックグラウンドで実行されるのを防ぐには?

実行したいスクリプトがあります。

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 &

関連情報