8

之后调用哪个函数退出子进程是正确的os.fork()

os._exit() 状态的文档:

标准的退出方式是sys.exit(n).

_exit()通常应该只在 . 之后的子进程中使用fork()

它没有说明是否可以使用sys.exit(). 所以:

  1. 是吗?
  2. 这样做有什么潜在的副作用吗?
4

2 回答 2

9

unix 方式是,如果您是 a 的孩子,fork则调用_exitexit和之间的主要区别在于_exit整理exit更多 - 调用atexit处理程序,刷新stdio等,而_exit用户空间中的东西最少,只是让内核关闭其所有文件等。

这非常直接地转化为 python 世界,sys.exit只需要做什么exit和做更多的 python 解释器关闭,os._exit尽可能少的地方。

如果你是一个孩子fork并且你打电话exit而不是_exit那么你最终可能会调用退出处理程序,当它退出导致未定义的行为时,父级将再次调用。

于 2012-06-13T07:52:37.487 回答
1

os._exit(n)您没有引用的部分文档是

以状态 n 退出进程,不调用清理处理程序、刷新 stdio 缓冲区等。

所以,我是如何阅读这篇文章的,os._exit()只要你共享文件处理程序,你就应该使用(这样它们就会被另一个进程关闭(),并且你自己负责刷新缓冲区(如果它对你的情况很重要)。没有共享资源(比如在“文件”中)——没关系。

因此,如果您的子进程仅用于计算,并且提供原始数据(而不是资源处理程序),那么使用exit().

于 2012-06-13T07:11:18.040 回答