簡體   English   中英

在python中創建進程,僅當它不存在時

[英]Create process in python, only if it doesn't exist

我有一個 python 服務器,它最終需要一個后台進程來執行一個操作。

它創建的子進程應該能夠比其父進程持續更長時間。 但是,如果它已經在運行,則不應創建這樣的子進程(如果先前的父進程創建了它,則可能會發生這種情況)。

我可以想到幾種不同的方法來解決這個問題:

  1. 在創建新進程之前檢查所有當前正在運行的進程: Cross-platform way to get PIDs by process name in python
  2. 在子進程啟動時寫入一個文件,完成后將其刪除。 在創建子進程之前檢查文件。

但它們似乎都不能完全滿足我的需求。 如果子進程是其父進程的分支,則解決方案 (1) 無法正常工作。 解決方案 (2) 很丑陋,看起來很容易失敗。

在進程創建時提供固定的 pid 或名稱對我來說非常好,這樣我就可以始終以固定方式在系統中查找進程並確定它是否正在運行。 但我還沒有找到辦法做到這一點。

“它創建了一個子進程,它應該能夠比其父進程持續更長時間。” 別。

讓一個更長壽的服務過程為您創造孩子。 通過 Unix 域套接字與此服務對話。 然后它可用於將文件描述符傳遞給子進程。 該服務還可以輕松確保它只有一個孩子。

這種模式可用於消除對比父母壽命長的孩子的需求。

使用命令名稱只需創建一個不執行任何操作的同名進程即可輕松執行 DoS。 由於 PID 重用,使用 PID 文件是不明確的。 只有擁有一個等待其子項的主管才能在它們退出時正確地重新啟動它們或確保它們正在運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM