C:处理多个管道时奇怪的write()行为

时间:2014-03-11 09:24:36

标签: c linux unix process fork

所以我有一个递归函数,它将创建多个进程并从父进程写入一个整数到子进程。

当数字小到数百/数千时,一切都很有效。

但是当数字很大时,代码将永远停留在write语句之前。我已经包含了对语句的错误检查,但没有打印出错误。

有谁知道可能的原因是什么?

1 个答案:

答案 0 :(得分:0)

write(2)pipe(7)时,如果管道另一端的进程没有从中读取(并且管道已满),则可以阻止写入。

您可以在poll(2)中使用event loop之类的多路复用系统调用。另请参阅this answer

但是你应该避免创建超过几十个同时进行的子进程。另请参阅setrlimit(2) RLIMIT_NPROC(以及bash ulimit内置版)。

另请阅读Advanced Linux Programming