#39322 [Opn->Csd]: proc_terminate(): loosing process resource
| From: | nlopess@php.net | Date: | Wed, 14 Feb 2007 19:22:06 +0000 |
| Subject: | #39322 [Opn->Csd]: proc_terminate(): loosing process resource | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-108922@lists.php.net to get a copy of this message | ||
ID: 39322
Updated by: nlopess@php.net
Reported By: c dot affolter at stepping-stone dot ch
-Status: Open
+Status: Closed
-Bug Type: Feature/Change Request
+Bug Type: Program Execution
Operating System: *
PHP Version: *
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:
------------------------------------------------------------------------
[2007-01-23 22:26:49] nlopess@php.net
I agree proc_terminate() shouldn't destruct the resource (I also come
across theis problem myself..)
------------------------------------------------------------------------
[2007-01-23 22:18:21] viraptor+phpbug at gmail dot com
I'd rather like to see proc_terminate act like documented:
"proc_terminate() allows you terminate the process and continue with
other tasks. You may poll the process (to see if it has stopped yet) by
using the proc_get_status() function."
If a known workaround is to send posix_kill, which does... exactly what
proc_terminate is supposed to do, why not implement proc_terminate as:
stat = proc_get_status(proc);
if(stat['running']) posix_kill(stat['pid'], sig);
?
+ update the $proc options as needed. That would be much more useful.
Additionaly not every signal actually kills process, so resource should
not be destroyed after SIGTERM.
Please correct code, not docs.
------------------------------------------------------------------------
[2006-11-08 14:55:16] tony2001@php.net
Reclassified as docu problem.
------------------------------------------------------------------------
[2006-10-31 16:22:53] c dot affolter at stepping-stone dot ch
Description:
------------
After sending a signal via proc_terminate() to a process, the process
resource gets closed immediately.
This means that calling proc_get_status() afterwards, will throw a
warning about an invalid process resource.
This behaviour is somewhat cumbersomely, since you're unable to check
if it was your signal which has caused the process to terminate or if
the process has stopped.
Is this a bug or an undocumented behaviour?
BTW:
Sending a signal via the shell or through posix_kill(), will retain the
status for the first proc_get_status() call.
Reproduce code:
---------------
<?php
$descriptors = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w'));
$pipes = array();
$process = proc_open('/bin/sleep 120', $descriptors, $pipes);
proc_terminate($process);
var_dump(proc_get_status($process));
?>
Expected result:
----------------
array(8) {
["command"]=>
string(14) "/bin/sleep 120"
["pid"]=>
int(23011)
["running"]=>
bool(false)
["signaled"]=>
bool(true)
["stopped"]=>
bool(false)
["exitcode"]=>
int(-1)
["termsig"]=>
int(15)
["stopsig"]=>
int(0)
}
Actual result:
--------------
Warning: proc_get_status(): 7 is not a valid process resource in ...
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=39322&edit=1