2012-06-13 98 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()