Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
之后调用哪个函数退出子进程是正确的os.fork()?
os.fork()
os._exit() 状态的文档:
os._exit()
标准的退出方式是sys.exit(n). _exit()通常应该只在 . 之后的子进程中使用fork()。
标准的退出方式是sys.exit(n).
sys.exit(n)
_exit()通常应该只在 . 之后的子进程中使用fork()。
_exit()
fork()
它没有说明是否可以使用sys.exit(). 所以:
sys.exit()
unix 方式是,如果您是 a 的孩子,fork则调用_exit。exit和之间的主要区别在于_exit整理exit更多 - 调用atexit处理程序,刷新stdio等,而_exit用户空间中的东西最少,只是让内核关闭其所有文件等。
fork
_exit
exit
atexit
stdio
这非常直接地转化为 python 世界,sys.exit只需要做什么exit和做更多的 python 解释器关闭,os._exit尽可能少的地方。
sys.exit
os._exit
如果你是一个孩子fork并且你打电话exit而不是_exit那么你最终可能会调用退出处理程序,当它退出导致未定义的行为时,父级将再次调用。
os._exit(n)您没有引用的部分文档是
os._exit(n)
以状态 n 退出进程,不调用清理处理程序、刷新 stdio 缓冲区等。
所以,我是如何阅读这篇文章的,os._exit()只要你共享文件处理程序,你就应该使用(这样它们就会被另一个进程关闭(),并且你自己负责刷新缓冲区(如果它对你的情况很重要)。没有共享资源(比如在“文件”中)——没关系。
因此,如果您的子进程仅用于计算,并且提供原始数据(而不是资源处理程序),那么使用exit().
exit()