2012-06-13 51 views
6

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

的文档os._exit()states

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

_exit()通常应该只在子处理的fork()后使用。

它没有说明是否可以使用sys.exit()终止子进程。所以:

  1. 是吗?
  2. 这样做是否有任何潜在的副作用?在os._exit(n)的文档,你没有提到的

回答

8

The unix way是,如果你是一个fork的孩子,那么你可以拨打_exitexit_exit之间的主要区别是,exit更整容 - 调用atexit处理器,刷新stdio等,而_exit做的东西的最低金额在用户空间,刚开内核关闭其所有文件等

这用sys.exitexit做的事情,并且做了更多的python解释器关机,其中os._exit尽可能小。

如果你是fork一个孩子,你叫exit而不是_exit那么你可能最终调用exit处理程序,当它退出导致不确定的行为家长将再次调用。

1

部分是

退出状态为n个过程,而不调用清除处理,刷新stdio的缓冲区等

那么,如何我正在读这篇文章,只要你共享文件处理程序,你应该使用os._exit()(所以它们会被另一个进程关闭(),并且你自己清理缓冲区(如果它对你的情况很重要)没有共享资源(如“文件”) - 没关系。

所以如果你的子进程的计算只,并传送原始数据(而不是资源的处理程序),那么它的安全使用exit()