我应该担心管道溢出吗?

时间:2012-01-26 09:01:06

标签: linux unix ipc pipe

有两个进程(父进程和子进程)通过管道进行通信。父级正在等待其子级退出,然后从管道的读取端读取数据。孩子可能产生相当多的输出。管道是否有可能因为未读数据太多而失败并丢失了一些孩子的输出?

2 个答案:

答案 0 :(得分:3)

无需担心:在标准的2.6或3.0内核上,管道缓冲区为64k - 因此,如果缓冲区已满,第一个进程将阻止写入。

如果另一方面这个太少,请在两个具有可配置内存大小的工作程序之间使用buffer

答案 1 :(得分:1)

是的,如果管道填满子进程块并导致死锁。

这是python中遇到的问题,请参阅[1]中的Popen.wait()警告,第17.1.2节;他们使用沟通方法来避免这个问题。

[1] http://docs.python.org/library/subprocess.html