gpt4 book ai didi

java - 我如何确定 STDERR 是否在 linux 机器上被缓冲?

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:22 25 4
gpt4 key购买 nike

我有一个调用挂起的 ksh 脚本的 Java 应用程序。查看后端显示脚本对 STDOUT 的写入过程已满并被阻止。 STDERR 应该是空的,我的 java 代码首先读取它。调试显示 java 应用程序在读取 STDERR 输入流时挂起,这反过来导致试图向 STDOUT 写入更多内容的脚本进程被阻止。我认为 STDERR 正在写入第二个(在 STDOUT 之后),所以它只是等待直到它看到输入(并且它无法接收输入,因为写入卡在 标准输出).

这个应用程序在多个 Linux 机器(所有相同的操作系统和内核)上运行良好,除了一个。将每个输入流读取放在单独的线程中可以解决这个盒子上的问题。我知道 STDERR 的 linux 默认值是非缓冲的,输入通常会立即写入。所以我认为 STDERR 可能被设置为在此框上进行缓冲。我如何/在哪里找到它的值(value)?

最佳答案

用一个线程读取 stderr 和 stdout 是一个的想法,这就是一个很好的例子。 正确的 解决方案是使用两个单独的线程。其他任何事情都只是等待失败的竞争条件。

也许您混淆了非缓冲和非阻塞?使 stderr 非缓冲不会消除您的程序可能在任何时间点挂起的可能性(通过阻塞 stderr 或 sdout)。

关于java - 我如何确定 STDERR 是否在 linux 机器上被缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063697/

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