我正在寻找有关以下代码片段中出现的错误的解释:
#!/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
传达给您的方式:
- 您内存不足或者
- 您已达到进程限制(例如
RLIMIT_NPROC
)
waitpid
修复了这个问题,因为它捕获了僵尸子进程;在您这样做之前,这些进程将计入上限(它必须保留它们,以便父进程可以查看终止信息)。
您可以在 its man page 上查看记录的各种 fork
错误代码。 .
关于python - 多次 fork 调用会导致 BlockingIOError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534288/