RFR 8059034: ProcessTools.startProcess() might leak processes

roger riggs roger.riggs at oracle.com
Thu Sep 25 13:39:02 UTC 2014


Hi,

The spec for destroyForcibly goes on to say that ProcessBuilder 
implements destroyForcibly correctly.

" Invoking this method on Process objects returned by 
ProcessBuilder.start() and Runtime.exec(java.lang.String) will forcibly 
terminate the process. "

Roger

On 9/25/2014 6:24 AM, Jaroslav Bachorik wrote:
> On 09/25/2014 12:13 PM, Staffan Larsen wrote:
>> I wonder if the p.waitFor() is needed? What if the process launching 
>> expired with a timeout and now we are still waiting for the process 
>> to end - wouldn’t that kind of defeat the timeout? In any case, the 
>> destroyForcibly() should end the process whether we wait for it or not.
>
> It would be wonderful but the javadoc states that the result of 
> destroyForcibly() call depends on the implementation and may actually 
> not force close the process and one should use waitFor() to make sure 
> that the process has in fact died.
>
> I wonder whether JTReg kills the process tree on timeout - in case it 
> does using waitFor() would guarantee that there would be no zombies 
> left. Without using waitFor() and semantics of destroyForcibly() there 
> might be situations when non-functional stuck processes are left 
> behind (not sure how probable, however).
>
> -JB-
>
>>
>> /Staffan
>>
>>
>> On 25 sep 2014, at 11:54, Jaroslav Bachorik 
>> <jaroslav.bachorik at oracle.com> wrote:
>>
>>> Please, review the following change to the JDK test library class
>>>
>>> Issue : https://bugs.openjdk.java.net/browse/JDK-8059034
>>> Webrev: http://cr.openjdk.java.net/~jbachorik/8059034/webrev.00
>>>
>>> Currently, the ProcessTools.startProcess() might leave a dangling 
>>> process behind when a timeout or interrupt happens. The solution is 
>>> to try and forcibly terminate the forked process when this happens.
>>>
>>> Thanks,
>>>
>>> -JB-
>>
>



More information about the jdk9-dev mailing list