Hi Martin,

Thanks for the review.

On 4/11/2015 1:37 AM, Martin Buchholz wrote:
Thanks for the huge effort. I did a superficial review and it seems pretty good. Of course, changing the Process good is high risk and some things will probably need fixup later.

On Unix, you seem to be identifying ProcessHandles by their pid. What are you going to do about the problem of misidentifying Unix processes whose pid got recycled? If you spin up a thread to call waitpid as soon as you create the ProcessHandle, the window is very short (and OSes avoid recycling pids immediately) so that's pretty safe, but it wastes a thread for each ProcessHandle! I don't have a good answer. Maybe record the start time of the process, where available?
Getting the basic API and implementation in has taken too long, so I'm looking to get it general agreement and pushed and then I'd be happy to go back and include the start time in ProcessHandle. In the case of children() which already has to read /proc/pid/stat for the parent, the start time is inexpensively available also. The spec for equals(), and compareTo is straightforward without the start time. With the start time, either starttime has be exposed in the API/spec or
be left 'implementation' dependent which is a poor spec.
Only in the case of allProcesses() would the overhead increase significantly, it currently
does not need to open /proc/pid for every process.


+        } else if (siginfo.si_code == CLD_KILLED || siginfo.si_code == 
CLD_DUMPED) {
Using siginfo probably won't work under load because multiple signals arriving at the same time are coalesced into one, at least on Linux.
Unix signals are sadly totally broken.
Siginfo is only used with waitid as an output argument

For the case of reaping the status, it uses waitpid (as Process did before),
that seemed the least risky.
For the case of waiting for a process without reaping, that option is only available using waitid. I tried using waitid for both cases but on Mac, waitid didn't seem to
be working correctly in all cases.


--

It seems you don't support sending arbitary signals, which is a little sad.
I had not investigated any potential negative and unknowable effects of being able to send arbitrary signals. The implementation is easy to generalize, though it does not map to Windows well/at all. Would you propose it as an 'int' argument with no limitation? or what limits? I think it would be an additional method, the current destory/destroyForcibly.

Thanks, Roger



On Thu, Apr 9, 2015 at 1:00 PM, Roger Riggs <roger.ri...@oracle.com <mailto:roger.ri...@oracle.com>> wrote:

    Please review the API and implementation of the Process API Updates
    described inJEP 102
    <https://bugs.openjdk.java.net/browse/JDK-8046092>. Please  review
    and comment by April 23rd.

    The recommendation to make ProcessHandle an interface is included
    allowing the new functions to be extended by Process subclasses.
    The implementation covers all functions on Unix, Windows, Solaris,
    and Mac OS X.

    The API doc: http://cr.openjdk.java.net/~rriggs/ph-apidraft/
    <http://cr.openjdk.java.net/%7Erriggs/ph-apidraft/>

    The webrev: http://cr.openjdk.java.net/~rriggs/webrev-ph
    <http://cr.openjdk.java.net/%7Erriggs/webrev-ph>

    Issue: JDK-8077350
    <https://bugs.openjdk.java.net/browse/JDK-8077350> Process API
    Updates Implementation

    The code is in the jdk9 sandbox on branch JDK-8046092-branch.

    Please review and comment, Roger



Reply via email to