我有一个调用挂起的 ksh 脚本的 java 应用程序。查看后端显示脚本的写入过程STDOUT
已满且被阻止。STDERR
应该是空的,我的 java 代码首先读取它。调试显示 java 应用程序在读取输入流时挂起,STDERR
这反过来导致脚本进程尝试向 STDOUT 写入更多内容被阻塞。我认为STDERR
正在写入第二个(之后STDOUT
),所以它只是等到它看到输入(并且它无法接收输入,因为写入被卡住了STDOUT
)。
这个应用程序在多个 Linux 机器(所有相同的操作系统和内核)上运行良好,除了一个。将读取的每个输入流放在单独的线程中解决了这个问题。我知道 linux 默认STDERR
是非缓冲的,输入通常会立即写入。所以我想这STDERR
可能会在这个盒子上设置为缓冲。我如何/在哪里找到它的价值?