我正在寻找有关以下代码片段的错误的解释:
#!/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
打电话可能会改变一下吗?
这是同样的问题每当fork就这样死了 https://stackoverflow.com/questions/13009632/getting-strange-behavior-from-terminal-and-iterm-bash-fork-resource-temporar;错误消息就是这样EAGAIN
传达给您:
- 你失忆了或者
- 您已达到进程限制(例如
RLIMIT_NPROC
)
waitpid
修复它,因为它获取僵尸子进程;在您这样做之前,这些进程将计入上限(它必须保留它们,以便父进程可以查看终止信息)。
你可以看到各种fork
错误代码记录于它的手册页 https://linux.die.net/man/2/fork.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)