2012-07-27 75 views
2

我有一個使用psutil運行一些各種twistd ...命令的Python程序。 twistd產生並守護進程並寫入foo.pid,我可以從中讀取該pid。如何可靠地獲取扭曲衍生過程的pid?

它還會設置爲在進程終止時清除此pid文件,這意味着生成的進程可能完成得太快而無法讀取pid。

twistd如果無法寫入pid文件,它會返回一個錯誤代碼,所以我可以假設沒有pid文件並且沒有扭曲的錯誤代碼意味着進程成功並且很快終止了,但是整個過程看起來很片斷。更不用說必須等待pid文件充滿內容,同時還要處理充滿的可能性,但又一次去除。

有沒有更好的方法?

回答

2

沒有更好的方法(或者如果存在,要知道它是什麼非常困難或不可能,因爲你沒有描述你正在解決的一般問題,你只是描述了一個問題有一個你已經選擇的解決方案)。儘管如此,

有一個open feature request使twistd更適合這種使用。如果你幫助解決問題,那麼你就可以做到這一點。

+0

我的「已選擇」解決方案只是我的最佳嘗試。例如,當命令行錯誤時,它不能在'twistd'的最奇怪的行爲之間分離,並且它返回的退出代碼爲零,程序結束速度非常快,這就是我問這個問題的原因。 – porgarmingduod 2012-07-29 08:59:47

+0

對不起,我想我的觀點不夠清楚。你爲什麼要啓動守護進程的扭曲子進程,然後試圖學習它的PID?總體目標是什麼? – 2012-07-29 13:59:19

+0

一般問題是啓動並監視幾個扭曲的服務,在必要時將其殺死,並報告內存和CPU使用情況等。 – porgarmingduod 2012-07-30 10:43:54

0

我不確定你在使用psutil的哪個部分,但只需撥打來自Twisted的spawnProcess就會觸發一個知道它的pid的IReactorProcess

如果是twistd你打電話給我,那麼如果你願意的話,肯定有辦法做同樣的過程。

+0

這個問題非常明確地指定了'twistd'被使用。我不是問如何創建進程,而是如何獲得以'twistd'命令行開始的進程的PID。我知道我可以用'-n'來運行'twistd'來不守護它,在這種情況下,我可以使用我用psutil生成自己的過程的pid,儘管我不確定它的含義。 – porgarmingduod 2012-07-27 13:00:50

+0

謝謝,我看到它指定'twistd',這並不意味着我很清楚你在哪裏使用它:)。你的問題說你正在使用'psutil'「來運行一些各種各樣的命令」。這聽起來像你正在產生新的過程。 (並且不,'-n'不相關) – Julian 2012-07-27 13:07:58

+0

實際上,'-n'使得使用'Popen'生成'twistd'過程是我感興趣的過程,也就是我的' Popen產生的進程與.pid文件中的pid相同。 – porgarmingduod 2012-07-29 08:56:16