ID: 32533 Updated by: [EMAIL PROTECTED] Reported By: chris at fragzzhost dot com -Status: Open +Status: Closed Bug Type: Program Execution Operating System: Linux 2.6.8 PHP Version: 5.* New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2005-04-01 14:46:47] chris at fragzzhost dot com Looking at the original bug report and comparing it to the PHP source, there is a difference. The code supplied in the bug #32210 works properly whereas what's actually in PHP 5.0.4 doesn't. ------------------------------------------------------------------------ [2005-04-01 14:42:13] chris at fragzzhost dot com Description: ------------ In the 5.0.4 release of PHP, the original proc_get_status bug (32210) doesn't appear to be fixed (Linux babe.fragzzhost.com 2.6.8.1 #1 SMP Tue Oct 12 08:27:04 CEST 2004 i686 i686 i386 GNU/Linux). The "running" field now is always TRUE. I know absolutely nothing about how this bit of code works, but I made the following change and it was fixed. Hopefully someone understands how this fluke works :) Original code (note not as posted code) if (WIFSTOPPED(wstatus)) { stopped = 1; stopsig = WSTOPSIG(wstatus); } } else { running = 0; } #endif My dreadful change: if (WIFSTOPPED(wstatus)) { stopped = 1; stopsig = WSTOPSIG(wstatus); } } else { running = 1; } #endif I would also like to add that the original patch below doesn't appear to work correctly? Immediately after I kill the process manually with kill -9, running is FALSE as expected, but then if I sleep(2) then call proc_get_status() again, running is TRUE, and the process described isn't running. Reproduce code: --------------- (Best run from the command line) $handle = proc_open("sleep 60", array(2 => array("pipe", "r")), $pipes); $status = proc_get_status($handle); var_dump($status["running"]); sleep(5); (confirmed at this stage that process is still running by 'ps aux') system('kill -9 '.$status['pid']); sleep(2); $status = proc_get_status($handle); var_dump($status["running"]); Expected result: ---------------- bool(false) bool(false) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=32533&edit=1