What would stop a task from being run in the background

job-control

I have a script I'm trying to launch with

php ./Script.php &

The task goes into the background but it is stopped. When I try to run it with bg it simply stays stopped.

$ jobs
[1]+  Stopped                 php ./Script.php
$ bg
[1]+ php ./Script.php &

[1]+  Stopped                 php ./Script.php
$

ps shows the job state as T

$ ps ax | grep Script
951 pts/5    T      0:00 php ./Script.php

cat /proc/PID/wchan shows "pipe_wait"

Update:

This happens with any PHP script, even <?php sleep(1000);

Update:

Thanks for all the great answers and comments. I understand why this is happening on a technical level now, but I'm not sure what about some versions of PHP are causing this. But, that is not a *nix question.

Best Answer

Almost certainly the command tried to read from the terminal when it was not in the foreground process group. This will cause the kernel to send SIGTTIN to the process, which by default will stop the process. A simple test would be to redirect stdin to /dev/null. If the process runs in the background without being stopped then the problem was SIGTTIN as described.