[英]python-twisted: fork for background non-returning processing
如何正確地將子進程分叉,不使用任何扭曲的東西(但使用來自父進程的數據)(例如,處理來自父進程的一些數據的“快照”並將其寫入文件,而不阻塞)?
看來如果我在os.fork()
之后執行像子進程中的干凈關閉這樣的事情,它會關閉父進程中的一些套接字/描述符; 避免我看到的唯一方法是執行os.kill(os.getpid(), signal.SIGKILL)
,這看起來似乎是一個壞主意(雖然沒有直接問題)。
(另外,如果在父進程中更改了dict,那么它是否會在子進程中發生變化?快速測試表明它不會改變。但OS /內核是debian stable / sid)
IReactorProcess.spawnProcess
(通常可from twisted.internet import reactor; reactor.spawnProcess
)可以生成運行系統上任何可用可執行文件的進程。 子進程不需要使用Twisted,甚至不需要使用Python。
不要自己打電話給os.fork
。 正如您所發現的,它與進程狀態有很多非常特殊的交互, spawnProcess
將為您管理。
os.fork
的問題包括:
fork()
,如果你試圖在fork
之后但在exec
之前使用它們,它們會簡單地崩潰你的程序。 exec
上關閉 - 但沒有這樣的標志讓它們在fork
關閉。 因此,如果您不仔細管理對它們的訪問,那么任何文件(包括日志文件,以及您可能甚至不知道的庫打開的任何后台臨時文件)都可能會被靜默損壞或截斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.