我正在搜索有关以下代码段错误的解释:
#!/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
调用可能会对此发生什么变化?
答案 0 :(得分:1)
这是同样的问题whenever fork
dies this way;错误消息就是EAGAIN
向您传达的方式:
RLIMIT_NPROC
) waitpid
修复了它,因为它收获了僵尸子进程;在你这样做之前,这些过程会计入上限(它必须保留它们,以便父母可以查看终止信息)。
您可以在its man page上看到各种fork
错误代码。