RFR: 8364361: [process] java.lang.Process should implement Closeable [v13]

Jason Mehrens duke at openjdk.org
Wed Oct 1 12:25:22 UTC 2025


On Tue, 30 Sep 2025 19:28:15 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

>> The teardown of a Process launched by `ProcessBuilder` includes the closing of streams and ensuring the termination of the process is the responsibility of the caller. The `Process.close()` method provides a clear and obvious way to ensure all the streams are closed and the process terminated.
>> 
>> The try-with-resources statement is frequently used to open streams and ensure they are closed on exiting the block. By implementing `AutoClosable.close()` the completeness of closing the streams and process termination can be done by try-with-resources.
>> 
>> The actions of the `close()` method are to close each stream and destroy the process if it has not terminated.
>
> Roger Riggs has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Additional review feedback.
>   Updated to emphasize reading the data from the streams and calling waitFor
>   to allow for normal termination.

src/java.base/share/classes/java/lang/Process.java line 205:

> 203:      * On some platforms, {@linkplain #supportsNormalTermination() normal termination}
> 204:      * is not available and the process is forcibly terminated.
> 205:      * The {@linkplain #waitFor() waitFor} method SHOULD NOT be called after

Calling waitFor with a timeout is a must for escalation of process termination.  E.G. TWR + finally waitFor with timeout. Then destroy with force. Optionally waitFor again if we need to know process is terminated.

It is not waitFor that should not be used. It is the result of exitValue or waitFor may or may not be a normal value from the process after any destroy method.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2394385338


More information about the core-libs-dev mailing list