從Python終端,我運行一些命令像下面,產卵長時間運行的子進程:Python的多和孩子的獨立性處理
from multiprocessing.process import Process
Process(target=LONG_RUNNING_FUNCTION).start()
此命令返回,我可以做其他的事情蟒蛇終端,但任何由孩子打印的內容仍然會打印到我的Python終端會話中。
當我退出終端(具有exit
或CTRL + d),它掛起退出命令。如果我在此掛起期間點擊了CTRL + C,子進程終止。
如果我手動終止python終端進程(通過posix kill
命令),子進程將被孤立,並繼續運行,其輸出可能被丟棄。
如果我python -c
運行這段代碼,它等待子終止,並CTRL +ç殺死雙方父母和孩子。
哪些運行配置的python會在父母終止時殺死孩子?特別是,如果一個python-mod_wsgi-apache web服務器產生子進程然後重新啓動,那麼這些子進程是否被殺死?
[順便說一下,分離終端產生的子進程的正確方法是什麼?有沒有一種方法比下面更優雅:Deliberately make an orphan process in python]
更新:通過下運行的Apache Web服務器與multiprocessing.Process
催生蟒子過程重新啓動Apache的時候不殺害。
子進程是我調度系統調用的前往模塊,但使用子進程啓動後臺python任務似乎不合適。你有沒有使用一個好的python-deamon庫(比如python-deamon)? – Zags
背景/前景區分特定於外殼中的作業控制;通常在應用中使用這些術語來處理管理是沒有意義的。在更一般的上下文中,守護進程是一個進程爲自己執行的事情,使用'subprocess.Popen'來啓動這樣的進程是完全標準的。 'python-daemon'很好;它有一個麻煩的API,但它是經過測試的,而後者的質量很重要,因爲很容易弄錯這種事情。 – Alp