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

标签 c linux unix process fork

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

当数字很小(例如数百/数千)时,一切都很好。

但是当数字很大时,代码总是会卡在write语句之前。我已经对语句进行了错误检查,但没有打印错误。

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

最佳答案

当你 write(2)pipe(7)如果管道另一端的进程没有从中读取数据(并且管道已满),则写入可能会被阻止。

您可以使用多路复用系统调用,例如 poll(2)在你的event loop 。另请参阅this answer .

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

另请阅读Advanced Linux Programming .

关于C:处理多个管道时 write() 的行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321371/

相关文章:

bash - 脚本中的陷阱命令在从 CLI 调用时有效,但在 PBS 作业中使用时无效

java - 使用 java.lang.Process 和特定用户从 Java 类执行 unix 程序

c - 尝试修改a.out。使用 fwrite 写入 a.out 时出现段错误

c - 输入/输出lzw问题

linux - vim setwidth 在 emacs 中等效

c - 为什么 "kill -15"有时会失败?

c - 如何以编程方式在 C/C++ 跨平台中创建 ssh 隧道?

mysql - 将 mysql.h 路径传递给 gcc 编译器

linux - 无法在Linux上设置内核动态调试?

unix - sed -i 选项有什么作用?