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

C:write()在处理多个管道时的行为很奇怪,c,linux,unix,process,fork,C,Linux,Unix,Process,Fork,所以我有一个递归函数,它将创建多个进程,并将一个整数从父进程写到子进程 当数字很小,比如几百/几千时,一切都很好 但是当数字很大时,代码总是卡在write语句之前。我已经包含了对声明的错误检查,但没有打印perror 有人知道这可能是什么原因吗?当您访问时,如果管道另一端的进程没有从中读取(并且管道已满),则可能会阻止写入 您可以在您的应用程序中使用类似的多路复用系统调用。另见 但是您应该避免创建超过几十个同时的子进程。另请参见带有RLIMIT\u NPROC(以及bashulimit内置) 另

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

当数字很小,比如几百/几千时,一切都很好

但是当数字很大时,代码总是卡在
write
语句之前。我已经包含了对声明的错误检查,但没有打印perror

有人知道这可能是什么原因吗?

当您访问时,如果管道另一端的进程没有从中读取(并且管道已满),则可能会阻止写入

您可以在您的应用程序中使用类似的多路复用系统调用。另见

但是您应该避免创建超过几十个同时的子进程。另请参见带有
RLIMIT\u NPROC
(以及bash
ulimit
内置)


另请阅读。

创建的同时子进程不要超过几十个
fork
-将其中的上千个应用程序删除几乎肯定是错误的。另外,检查每个系统调用(包括
fork
pipe
write
read
…)。最后,使用所有警告和调试信息(
gcc-Wall-g
)进行编译,并使用调试器(
gdb
)@BasileStarynkevitch这是一个家庭作业,提供的算法要求我们这样做..嗯,我应该怎么做?我想我们在课堂上没有学到什么。那一定是我自己的算法出了问题。。无论如何谢谢你!否,在代码中添加事件循环。你的老师希望你学习。