python - 多次 fork 调用会导致 BlockingIOError

标签 python macos python-3.x fork

我正在寻找有关以下代码片段中出现的错误的解释:

#!/usr/bin/env python3

import os, sys

if __name__ == '__main__':
    while True:
        pid = os.fork()
        if pid == 0:
            sys.exit()
        elif pid > 0:
            pass
            # os.waitpid(pid, 0)
        else:
            sys.exit()

这将产生许多进程(产生时退出的进程)。

这最终会导致 BlockingIOError 显示如下:

Traceback (most recent call last):
  File "./asd.py", line 7, in <module>
    pid = os.fork()
BlockingIOError: [Errno 35] Resource temporarily unavailable

但是当 os.waitpid 调用取消注释时,一切似乎都很好。

为什么会发生此错误以及此 waitpid 调用可能会改变什么?

最佳答案

同样的问题whenever fork dies this way ;错误消息正是 EAGAIN 传达给您的方式:

  1. 您内存不足或者
  2. 您已达到进程限制(例如 RLIMIT_NPROC)

waitpid 修复了这个问题,因为它捕获了僵尸子进程;在您这样做之前,这些进程将计入上限(它必须保留它们,以便父进程可以查看终止信息)。

您可以在 its man page 上查看记录的各种 fork 错误代码。 .

关于python - 多次 fork 调用会导致 BlockingIOError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534288/

相关文章:

python - 在 numpy.savetxt 中设置 fmt 选项

python - 通过集成创建一个新的 lambda 函数

python - 如何重现由 sqlalchemy session 缓存引起的错误

Python Reportlab - 无法打印特殊字符

macos - 如何在 macOS 上禁用 vsync

objective-c - 在黑色背景上呈现 NSTextField 和 NSTextView 之间的差异

asp.net - 尝试在 macOS 上启动现有项目时获取 "ApplicationHost.cs file not found"

python-3.x - Docker 容器的 sshfs 挂载卡住,但仅当由 Python 挂载时

Python 无列表大小

python - 如何使用 paramiko 与远程应用程序进行交互?