Edit report at http://bugs.php.net/bug.php?id=39992&edit=1

 ID:               39992
 Comment by:       mast at imast dot ru
 Reported by:      nlop...@php.net
 Summary:          proc_terminate() leaves children of child running
 Status:           Open
 Type:             Bug
 Package:          Program Execution
 Operating System: linux
 PHP Version:      6CVS-2006-12-30 (CVS)

 New Comment:

Well I've also just found this problem.

I run sh script via proc_open and if this script runs child processes
that could 

hang, they will not be killed if you run proc_terminate().



To fix it I use:



// As soon proc is started

$status = proc_get_status($proc);

posix_setpgid($status['pid'], $status['pid']);



// When I need to kill it

posix_kill(-$status['pid'], 9); // sends SIGKILL to all processes inside
group

proc_close($proc);



Why not to add this into proc_terminate() implementation?


Previous Comments:
------------------------------------------------------------------------
[2010-02-17 08:23:48] gryp at dakin dot be

We're having the same problem by starting java.

(the java process starts as root and forks itself to another userid)



the 'sh' gets killed but our java process keeps on running

------------------------------------------------------------------------
[2008-08-12 22:03:45] nlop...@php.net

Yes, I'm still able to reproduce it. In some systems you may need higher
proviledges in order to reproduce this bug.

------------------------------------------------------------------------
[2008-08-12 16:28:58] j...@php.net

Nuno, is this still valid bug? I can't reproduce it even with PHP
5.2.6..

------------------------------------------------------------------------
[2006-12-30 15:54:27] nlop...@php.net

Ah I forgot: removing the "2>&1" part everything works fine.

------------------------------------------------------------------------
[2006-12-30 15:52:20] nlop...@php.net

Description:
------------
With the short reproduce code below, PHP fork()s a new process (sh),
that itself forks a new one (php). proc_terminate() kill()s the sh
process, but the php one doesn't get killed.

I'm not really sure what is causing this problem, but it is breaking
run-tests.php on timeout.

Reproduce code:
---------------
<?php



$cmd='php -r "while(1){}" 2>&1';

$proc = proc_open($cmd, array(), $pipes);

var_dump(proc_terminate($proc));



?>



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=39992&edit=1

Reply via email to