3

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.

chugadie
  • 158
  • 1
    What is this script doing? Likely cause is that it tried to read from STDIN and was sent a SIGTTIN. – phemmer Aug 28 '14 at 00:21
  • The script does read command line arguments from argv. Is that not possible to do with a background job? – chugadie Aug 28 '14 at 00:27
  • I am able to background with nohup. But I've never run into such a situation before (that I can recall). – chugadie Aug 28 '14 at 00:33

2 Answers2

4

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.

Kyle Jones
  • 15,015
2

If NO terminal (or stdin) input is truely required, then you can do the following:

 php ./Script.php </dev/null &
mdpc
  • 6,834