所以我有一个递归函数,它将创建多个进程并将一个整数从父进程写入子进程。
当数字很小(例如数百/数千)时,一切都很好。
但是当数字很大时,代码总是会卡在write
语句之前。我已经对语句进行了错误检查,但没有打印错误。
有谁知道这可能是什么原因吗?
最佳答案
当你 write(2)到 pipe(7)如果管道另一端的进程没有从中读取数据(并且管道已满),则写入可能会被阻止。
您可以使用多路复用系统调用,例如 poll(2)在你的event loop 。另请参阅this answer .
但是您应该避免创建超过几十个同时的子进程。另请参阅setrlimit(2)使用 RLIMIT_NPROC
(以及内置的 bash ulimit
)。
关于C:处理多个管道时 write() 的行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321371/