ID: 44994
Comment by: jkflash at gmail dot com
Reported By: dbarrett at vistaprint dot com
Status: Assigned
Bug Type: Program Execution
Operating System: Windows 2003 Server, 64-bit
PHP Version: 5.2.6
Assigned To: pajoye
New Comment:
Sorry, I take that last comment back, it still hangs annoyingly
intermittently with shell_exec as well. It's a killer :(
Previous Comments:
------------------------------------------------------------------------
[2008-08-13 01:08:19] jkflash at gmail dot com
PS: shell_exec() DOES seem to work without hanging on my setup, but
none of the others.
------------------------------------------------------------------------
[2008-08-12 23:50:58] jkflash at gmail dot com
I am experiencing this same problem with PHP 5.2.1 running on IIS as an
ISAPI module on Windows Server 2003 R2 SP2. Intermitently (a handful of
times in a hundred) a process started with exec() will appear to
complete ok but remain running in a zombie state. The IIS worker process
that created the process will not respond to any further requests. I
need to either open a new client browser or kill the worker process.
I get the same result with system, passthru, p_open and proc_open.
------------------------------------------------------------------------
[2008-07-29 15:03:40] nobody at dontsendmespam dot com
i can reproduce this problem on a debian server with apache2 and
php5.2.6 running as fcgi
------------------------------------------------------------------------
[2008-07-23 02:02:29] efesar at gmail dot com
I just upgraded from PHP 5.1.2 to 5.2.6, and this exact problem happens
to me. The exec and shell_exec used to work, and now they don't. They
hang the php process, and every subsequent call to exec produces a lost
cmd.exe ...
Incidentally passthru() causes the same behavior.
Maybe it has something to do with the rotatelogs.exe ... somebody
earlier mentioned that it was waiting on c:\Apache2\logs\error.log ...
So, basically, we can't run any system calls whatsoever via PHP. I
don't want to use a COM object, because I like portable code ... but
that might be the best step until this bug is fixed.
------------------------------------------------------------------------
[2008-07-07 18:57:12] stephen dot cuppett at sas dot com
I am also experiencing this problem. I have been able to recreate it
with system() as well as proc_open(). With proc_open() it doesn't seem
to matter if I set bypass_shell or not, just determines whether I have a
dangling cmd.exe process or not...
cmd.exe seems to stop at Wait:UserReq, but that probably doesn't mean
much.
I am able to reproduce it with XAMPP 1.6.6a (PHP 5.2.5) on Windows XP
or Windows Server 2003 (32-bit).
I don't have much to add in terms of documentation as I don't get
anything in the httpd logs, but using the following code snippet:
protected function runSAS($filename) {
$this->log("Requested to run SAS file:
" . $filename, LOG_DEBUG);
$toRun = "\"" . SAS . "\"";
$toRun .= " -sysin '" . $filename .
"'";
$toRun .= " -CONFIG '" . SASV9CFG .
"'";
$toRun .= " -PRINT '" . TEMP_DIR . "/"
. basename($filename) . ".lst'";
$toRun .= " -LOG '" . TEMP_DIR . "/" .
basename($filename) . ".log'";
$toRun .= " -NOSPLASH";
$this->log("SAS command to run: " .
$toRun, LOG_DEBUG);
$descriptorspec = array(
0 => array("pipe",
"r"), // stdin is a pipe that the child will read from
1 => array("pipe",
"w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w")
// stderr is a file to write to
);
$res = proc_open($toRun,
$descriptorspec, $pipes, null, null, array(/*"bypass_shell" =>
true*/));
if (is_resource($res)) {
//fwrite($pipes[0],
"exit\n");
//fflush($pipes[0]);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value =
proc_close($res);
$this->log("Return
value from SAS: " . $return_value, LOG_DEBUG);
}
}
When it does seem to complete, I'll get this in my log:
2008-06-26 20:23:55 Debug: Return value from SAS: 1
Nothing should come out on the pipes at all and when I set it up to
read those and it completes, there is no data read. However, in a hang
case, PHP blocks reading STDOUT instead of on proc_close never getting
any data... even if I set the stream to be non-blocking on the pipe
explicitely after proc_open.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/44994
--
Edit this bug report at http://bugs.php.net/?id=44994&edit=1