review request: 4244896: (process) Provide System.getPid(), System.killProcess(String pid)
Rob McKenna
rob.mckenna at oracle.com
Fri Apr 20 17:03:41 UTC 2012
Thanks a lot for the feedback folks.
Jason, as Alan notes, that makes a lot of sense. Thanks for that.
I'm planning to do the following over the next couple of days:
- fix UnixProcess.waitFor(long, TimeUnit) as per David's mail.
- alter the default waitFor(long, TimeUnit) comments/implementation as
per Alan's comments.
- put some more work into firming up the test.
I'll get back to the alias with a new webrev when I'm done.
One thing I would note is that there is a "process reaper" thread in the
UnixProcess implementations that will call Process.notifyAll() when the
process exits.
-Rob
On 20/04/12 17:09, Alan Bateman wrote:
> On 20/04/2012 02:33, Rob McKenna wrote:
>> I've uploaded another webrev to:
>>
>> http://cr.openjdk.java.net/~robm/4244896/webrev.02/
>> <http://cr.openjdk.java.net/%7Erobm/4244896/webrev.02/>
>>
>> I plan to spend some time over the coming day or two beefing up the
>> test for waitFor (right now its really geared towards
>> destroyForcibly) so I won't guarantee its 100% quite yet. That said,
>> I would like feedback on a couple of points before I proceed:
>>
>> 1) Alan suggested the use of System.nanoTime() so I altered
>> waitFor(long) to allow for a TimeUnit parameter. UnixProcess objects
>> can use Object.wait(long, int) but unfortunately
>> WaitForMultipleObjects (on Windows) only works to millisecond precision.
>>
>> 2) As Alan noted, there is really no need for isAlive() if people are
>> happy with the idea of waitFor(long, TimeUnit). I'd appreciate any
>> feedback on this aspect of the fix.
>>
>> -Rob
> Sorry I haven't time to reply before now.
>
> I think destroyForcibly and isAlive are quite good. In destroyForcibly
> then "invokes destroy" should probably be a link or @code. The @since
> should be after the @return. For isAlive then I would suggest "Tests
> whether the subprocess is live" rather an "Returns a boolean ...".
>
> waitFor needs discussion. In 1 above you mentioned nanoTime but I
> think I was actually suggesting we need to decide if the method is
> old-style waitFor(timeout) or j.u.c/new-style
> waitFor(timeout,TimeUnit). As Process doesn't have timeouts already
> then I don't see a problem introducing the j.u.c style. I see you've
> also changed it to return a boolean too so overall the signature looks
> much better. I did question whether we need both isAlive and
> waitFor(0L,...) but Jason's comment make sense, you don't want to have
> exception handling to poll a sub-process. On the javadoc then I don't
> think it should mention that it polls every 100ms, that's too
> closterfobic and someone will likely want to test it too.
>
> On the implementation then it looks like Windows is right but the
> Solaris/Linux/Mac implementation doesn't wakeup if the sub-process
> terminates before the timeout has elapsed. If this proves too
> difficult then going forward with the destroyForcibly + isAlive,
> leaving waitFor to another day is fine. On the default implementation
> (pre-jdk8 Process implementations outside of the JDK) then I assume
> this method will misbehave with a large timeout (the addition will
> overflow). You could probably adjust the sleep timeout when the
> remaining time is <100ms.
>
> -Alan.
>
>
More information about the core-libs-dev
mailing list