gpt4 book ai didi

java - 在 Java 中的 Process.destroy() 之后,stderr/stdout 流会发生什么变化?

转载 作者:搜寻专家 更新时间:2023-11-01 01:48:14 25 4
gpt4 key购买 nike

我希望从 Java 启动的进程有一个超时。超时后,我想终止进程。到目前为止,一切都很好。问题是,我想在正常执行期间和超时后捕获 stderr/stdout。如果我用 destroy() 终止进程会发生什么?我可以检索到目前为止生成的(部分)stderr/stdout 吗?或者他们走了?

最佳答案

进程处理本质上是特定于操作系统的,我在这里专门研究 Java 如何处理 Unix 进程。

不幸的是Process closes its streams when you call .destroy() .我不知道为什么 JDK 设计者认为这是正确的设计模式,但它确实使处理终止进程变得更加复杂。

值得注意的是 InputStreamProcessProcessPipeInputStream 的实例它实际上有一个 drainInputStream() 方法,它完全符合我们的要求——它读取后备文件描述符中的任何剩余字节,并将它们存储在字节缓冲区中。此方法“在进程退出时由进程收割线程调用”,但不幸的是,当进程被 .destroy() 编辑为 TERM 时不会被调用。

那么你所能希望的最好的事情就是临时装配你自己的 drainInputStream() 行为并为 stdoutstderr 调用它在调用 .destroy() 之前。在您耗尽数据之后但在 .destroy() 完成之前,仍有可能将某些数据写入任一流,但这将获得大部分

关于java - 在 Java 中的 Process.destroy() 之后,stderr/stdout 流会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com