gpt4 book ai didi

java - ProcessBuilder 持有生成进程的锁

转载 作者:行者123 更新时间:2023-12-01 13:54:42 27 4
gpt4 key购买 nike

我正在从我的程序中调用外部 JAVA 进程。我正在使用该生成进程生成的输出,如下所示:

DataInputStream dis = new DataInputStream(new BufferedInputStream(myProcess.getInputStream()));

从一个线程中,我正在执行以下操作:

            while (dis.available() != 0) 
{

firstMesg = dis.readLine();


if(firstMesg != null)
{
// processing with the message
//System.out.println(firstMesg);
}
}


try
{
Thread.currentThread().sleep(SLEEP_TIME);
}
catch(Throwable e)
{
}

我给了 SLEEP_TIME 大约 1 分钟,一切都运行良好。突然,对于一个特定的设置,我发现 Sys out (System.out.println) 从生成的进程中花费了非常长的时间。

谁能告诉我发生了什么事吗?这两个过程必须是独立的。然而,调用者正在读取被调用进程的数据。但是被调用进程正在写入的缓冲区应该很大。所以它不可能被阻止。

我可以在 ProcessBuilder Java 文档中看到这一点:

父进程使用这些流(#getInputStream()、#getErrorStream())向子进程提供输入并从子进程获取输出。因为一些原生平台只为标准输入输出流提供有限的缓冲区大小,无法及时写入子进程的输入流或读取子进程的输出流可能导致子进程阻塞,甚至死锁。

最佳答案

看看NuProcess库,它为生成的进程提供非阻塞(异步)I/O。 免责声明:我是 NuProcess 的作者

关于java - ProcessBuilder 持有生成进程的锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19680461/

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