Linux 如何确定管道缓冲区已满?

Linux 如何确定管道缓冲区已满?,linux,Linux,我想知道是否有linux实用程序可以报告管道缓冲区的使用情况 当我使用python的子进程模块时,有时子进程会被阻塞,因为OS管道缓冲区已满。当这种情况发生时,我通常会花大量时间通过猜测来推断缓冲区已满。所以,我想知道有更简单的方法来确定OS管道缓冲区是否已满 感谢bash中的ulimit-p告诉您 $ ulimit -p 8 $ ulimit -a | grep pipe pipe size (512 bytes, -p) 8 这里管道缓冲区的大小是512字节。但是你

我想知道是否有linux实用程序可以报告管道缓冲区的使用情况

当我使用python的子进程模块时,有时子进程会被阻塞,因为OS管道缓冲区已满。当这种情况发生时,我通常会花大量时间通过猜测来推断缓冲区已满。所以,我想知道有更简单的方法来确定OS管道缓冲区是否已满


感谢bash中的ulimit-p告诉您

$ ulimit -p
8

$ ulimit -a | grep pipe
pipe size            (512 bytes, -p) 8

这里管道缓冲区的大小是512字节。但是你不知道它是满的还是不满的。你不应该真的对它感兴趣。您应该设计您的程序,使其即使在缓冲区填满时也能工作:最合理的程序应该只是等待,当读卡器从管道读取时,它们就会被解锁

也就是说,在python中可以使用
os.O\u NONBLOCK
。当您执行一个会阻塞操作系统的写入操作时,write应该立即返回
EAGAIN
。从linux手册页:

EAGAIN
文件描述符fd指的是套接字和 已标记为非阻塞(
O_NONBLOCK
),写入将 街区


但是就像
nos
ask一样,一旦你知道写操作会阻塞,除了等待缓冲区耗尽,还有什么可以做的呢?

正常的方法是使用非阻塞I/O,它允许你检测它,为什么这对你来说是个问题?管道设计为在满时堵塞。满了你想做什么?我想这个问题属于谢谢@cnicutar。我试图制作一些脚本来控制QEMU。为此,我将stdin/out从QEMU进程重定向到使用子进程的管道。当时,我忘了排水管道,QEMU过程突然停止。花了几个小时才找出进程停止的原因是管道已满。因此,我只是想知道有一些快速的方法来识别这样的问题。