RFR 8059034: ProcessTools.startProcess() might leak processes
Mikael Auno
mikael.auno at oracle.com
Thu Sep 25 10:31:10 UTC 2014
On 2014-09-25 12:24, 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.
The javadoc also states though, that the implementation you get when
using either ProcessBuilder.start() or Runtime.exec() does in fact
forcibly terminate the process. ProcessTools.startProcess() does use
ProcessBuilder.start(), so you should be good on that point at least.
Mikael
> 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