[PATCH] JDK-8155102: Process.toString could include pid, isAlive, exitStatus

Andrey Dyachkov andrey.dyachkov at gmail.com
Sun Jul 24 11:42:15 UTC 2016


Hi Roger,

Thank you for reviewing it! I've prepared another version.

diff --git a/src/java.base/unix/classes/java/lang/ProcessImpl.java
b/src/java.base/unix/classes/java/lang/ProcessImpl.java
--- a/src/java.base/unix/classes/java/lang/ProcessImpl.java
+++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java
@@ -630,6 +630,21 @@
         return !hasExited;
     }

+    /**
+     * The {@code toString} method for class {@code ProcessImpl}
+     * returns a string consisting of the native process ID of the process,
+     * exit code of the process and the status of the process.
+     *
+     * @return  a string representation of the object.
+     */
+    @Override
+    public String toString() {
+        return new StringBuilder("ProcessImpl{pid=").append(pid)
+        .append(", exitcode=").append(exitcode)
+        .append(", hasExited=").append(hasExited)
+        .append("}").toString();
+    }
+
     private static native void init();

     static {

On Mon, 9 May 2016 at 16:50 Roger Riggs <Roger.Riggs at oracle.com> wrote:

> Hi Andrey,
>
> Since toString is a public method it needs to provide complete javadoc
> specification
> as providing values for debugging information.  ToString methods
> typically directly
> reflect the state of the fields of the object.
>
> Why should the exitValue have the value of the pid if the process is not
> alive?
>
> Also, the if toString is providing the exitValue then it should be
> identified as "exitValue", not exitCode.
> the isAlive value should be identified as "isAlive".
> The implementation class should not be exposed.  (remove
> this.getClass().getSimpleName()).
>
> The performance of what seems like a simple toString method is not going
> to be great
> because of the native calls necessary to determine if the process is
> alive (called twice)
> and in the case of exitValue to handle the IllegalStateException.
>
> Some of the overhead could be avoided, by implementing toString in each
> of the ProcessImpl.java
> files where the current state is known more conveniently with less
> overhead.
>
> $.02, Roger
>
>
> On 5/8/2016 2:47 PM, Andrey Dyachkov wrote:
> > Hello,
> >
> > I have added toString() method in Process.java.
> >
> > diff --git a/src/java.base/share/classes/java/lang/Process.java
> > b/src/java.base/share/classes/java/lang/Process.java
> > --- a/src/java.base/share/classes/java/lang/Process.java
> > +++ b/src/java.base/share/classes/java/lang/Process.java
> > @@ -548,5 +548,16 @@
> >           return toHandle().descendants();
> >       }
> >
> > +    @Override
> > +    public String toString() {
> > +        boolean isAlive = this.isAlive();
> > +        return new
> > StringBuilder(this.getClass().getSimpleName()).append("[")
> > +                        .append("running=").append(isAlive).append(", ")
> > +                        .append(isAlive ? "pid=" : "exitCode=")
> > +                        .append(isAlive ? this.getPid() :
> this.exitValue())
> > +                        .append("]")
> > +                        .toString();
> > +    }
> > +
> >
> >   }
>
> --

With great enthusiasm,
Andrey


More information about the core-libs-dev mailing list