This could be specific to the PHP package from Ubuntu. Please consider the following a disclaimer.
$ php -v
PHP 5.3.5-1ubuntu7.2 with Suhosin-Patch (cli) (built: May 2 2011 23:00:17)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION="Ubuntu 11.04"
I have a file with the following contents:
$ cat stdin.php
and I was doing something like this (backgrounds the script. I was using a slightly modified version to make concurrent SOAP requests)
$ for i in `seq 1 2`; do echo $i; sleep 2s; php /tmp/stdin.php >> /tmp/k7.out & done
$ jobs
[1]- Stopped php /tmp/stdin.php >> /tmp/k7.out
[2]+ Stopped php /tmp/stdin.php >> /tmp/k7.out
There are a few threads on the Internet relating to the issue and there are a few solutions.
First let us kill the 'STOPPED' jobs
$ kill %1
$ kill %2
[1] Terminated php /tmp/stdin.php >> /tmp/k7.out
$ jobs
[2]+ Terminated php /tmp/stdin.php >> /tmp/k7.out
One of the solutions that worked for me was by supplying something to STDIN (perhaps STDIN was blocking, but then again, stream_set_blocking (STDIN, 0) wasn't of much help).
$ for i in `seq 1 2`; do echo $i; sleep 2s; php /tmp/stdin.php >> /tmp/k7.out < /dev/null & done
and you could simulate arguments
$ for i in `seq 1 2`; do echo $i; sleep 2s; echo arg1 arg2 | php /tmp/stdin.php >> /tmp/k7.out & done
$ tail -f k7.out
0.82262900 1316606606
array(2) {
[0]=>
string(4) "arg1"
[1]=>
string(4) "arg2"
}
0.83546500 1316606608
array(2) {
[0]=>
string(4) "arg1"
[1]=>
string(4) "arg2"
}