On Sun, 28 Sep 2025 13:22:55 GMT, Jaikiran Pai <[email protected]> wrote:

>> Roger Riggs has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Update close() to use "terminate" consistently.
>
> src/java.base/share/classes/java/lang/Process.java line 186:
> 
>> 184:      * <p>
>> 185:      * Before calling this method the caller should read the streams 
>> for any
>> 186:      * data or text and call {@linkplain #waitFor() waitFor} if the 
>> exit value is needed.
> 
> Should we add some additional text which clearly highlights that waitFor() 
> needs to be called (before close()) to allow the process to run to 
> completion, even when the exit value or the stream contents aren't used/read 
> by the calling application? I realize that a few lines above we specify:
> 
>> The streams are closed immediately and the process is terminated without 
>> waiting.
> 
> But maybe explicitly saying that waitFor() is necessary for allowing the 
> process to run to completion would help reduce confusion? When I first saw 
> the PR, my initial thought was `Process.close()` would wait for the process 
> to run to completion and cleanup the resources that were used and I suspect 
> it might become a common pattern where applications do something like:
> 
> 
> try (Process p = new ProcessBuilder("some process that takes 5 seconds to 
> complete normally").start()) {
> }
> 
> and be surprised that the launched process was abruptly terminated. So maybe 
> some clear text on this method would help?

I think those warnings are already present.
- `process is terminated without waiting`
- `the caller should read the streams for any data or text and call waitFor if 
the exit value is needed`
- `Calling waitFor before calling close or exiting the try-with-resources block 
allows the process time to clean up and exit.`
- and the example calls waitFor inside the try-with-resources.

Does this add the emphasis you are asking for:
`Calling waitFor after close() or after the try-with-resources block exits 
returns the status after destroying the process.`

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

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

Reply via email to