ID: 34794 Comment by: Dallas at ekkySoftware dot com Reported By: e-t172 at e-t172 dot net Status: Assigned Bug Type: Program Execution Operating System: Linux PHP Version: 5CVS-2005-10-09 (snap) Assigned To: wez New Comment:
I have a similar problem, it seems at I can't concurrently call the same page with proc_open until the first proc_open returns. It looks like proc_open is running through a critical section even though it is opening separate processes. >From experience it is like php is using the same pipes for each proc_open and can't continue to the next proc_open until the original as ended. I would normally use temporary files instead of pipes but this makes life difficult. Dallas http://www.ekkySoftware.com/ Previous Comments: ------------------------------------------------------------------------ [2006-04-26 14:50:23] radu dot rendec at ines dot ro Same problem with 5.1.3RC4-dev (latest CVS snapshot at the moment) on Linux/i386. I independently reproduced the bug with the following piece of code: error_reporting(E_ALL); $spec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w") ); $p1 = proc_open("/bin/cat", $spec, $fd1); $p2 = proc_open("/bin/cat", $spec, $fd2); fclose($fd1[0]); fclose($fd1[1]); fclose($fd1[2]); echo "closing p1... "; flush(); proc_close($p1); echo "success\n"; flush(); This code hangs in proc_close(). This doesn't happen if the second proc_open() is commented. Although the parent process seems to correctly close all pipes, the child process still remains blocked in read(0,...). ------------------------------------------------------------------------ [2005-11-01 11:54:27] [EMAIL PROTECTED] Assigned to the author of this stuff. ------------------------------------------------------------------------ [2005-10-09 20:12:09] e-t172 at e-t172 dot net Same problem with the last CVS Snapshot. ------------------------------------------------------------------------ [2005-10-09 18:23:40] e-t172 at e-t172 dot net Description: ------------ (i am french, sorry for my bad english) 1. Open two processes with proc_open() 2. Try to close them : it works only if you close the second one first, otherwise it hangs Reproduce code: --------------- <?php echo('Opening process 1'."\n"); $process1 = proc_open('cat', array(0 => array('pipe', 'r'), 1 => array('pipe', 'r')), $pipes1); echo('Opening process 2'."\n"); $process2 = proc_open('cat', array(0 => array('pipe', 'r'), 1 => array('pipe', 'r')), $pipes2); // WORKS : //echo('Closing process 2'."\n"); //fclose($pipes2[0]); fclose($pipes2[1]); proc_close($process2); //echo('Closing process 1'."\n"); //fclose($pipes1[0]); fclose($pipes1[1]); proc_close($process1); // DOESN'T WORK : echo('Closing process 1'."\n"); fclose($pipes1[0]); fclose($pipes1[1]); proc_close($process1); echo('Closing process 2'."\n"); fclose($pipes2[0]); fclose($pipes2[1]); proc_close($process2); ?> Expected result: ---------------- $ php -f test.php Opening process 1 Opening process 2 Closing process 1 Closing process 2 $ Actual result: -------------- $ php -f test.php Opening process 1 Opening process 2 Closing process 1 (HANGS) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34794&edit=1