Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定STDERR是否缓冲在linux设备上?_Java_Linux_Unix_Buffer_Pipe - Fatal编程技术网

Java 如何确定STDERR是否缓冲在linux设备上?

Java 如何确定STDERR是否缓冲在linux设备上?,java,linux,unix,buffer,pipe,Java,Linux,Unix,Buffer,Pipe,我有一个java应用程序,可以调用挂起的ksh脚本。查看后端显示脚本对STDOUT的写入过程已满且被阻止STDERR应该是空的,我的java代码首先读取它。调试显示java应用程序在读取STDERRinputstream时挂起,这反过来会导致试图向STDOUT写入更多内容的脚本进程被阻止。我认为STDERR正在被写入第二个(在STDOUT之后),所以它只是等待直到看到输入(并且它无法接收输入,因为写入被困在STDOUT上) 此应用程序在多个Linux设备(所有相同的操作系统和内核)上运行良好,只

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


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

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


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

Hmm,我可能在stdio中找到了它。h您找到答案了吗?你能把它贴在这里吗?不,从来没想过。哦,是的,我明白为什么现在使用一个线程是个坏主意。我只是想知道为什么读取在4个以上的盒子上没有任何问题,但是在一个盒子上失败了。都有相同的操作系统和内核,我想这是一些配置/设置。在非缓冲状态下,STDERR的扩展流中的字符应该可以立即读取。由于从stderr读取的数据是挂起的,所以我认为输出不能立即可用(并且是缓冲的)。@JohnSmtith-这就是竞争条件的本质。他们大部分时间都很出色,然后。。。繁荣莫名其妙