2014-01-21 71 views
1

試圖在linux上啓動進程時尋求通知的方式。問題在於,流程A啓動流程B,流程B在啓動流程C後死亡。我需要跟蹤A,B和C的流程ID。流程歷史記錄不針對死進程維護。Linux在進程啓動時通知

+0

偶爾使用strace(1)可能就足夠了。 –

+0

解釋什麼是* A *,* B *和* C *。你有他們的源代碼嗎?他們是免費軟件嗎?你可以配置它們嗎(例如用一個包裝shell腳本替換它們中的一些)? –

回答

0

您可能想要process accounting,例如GNU acct。但是這可能會處理大部分流程。

如果你可以改變,配置或修改您的一個,或Ç考慮使用syslog(3)。這可以如同用例如程序B來代替那樣簡單。一個以logger(1)開頭的腳本,然後exec-原始的B程序。你甚至可以嘗試用你的PATH來玩弄「透明」的做法。

1

當進程啓動時,您不需要獲取通知,只需要可靠地跟蹤屬於特定組的進程。那麼,Linux有一個偉大的設施 - 使用Control Groups。你可以閱讀更多關於控制組here

將進程A移動到其自己的控制組中,其所有後續子進程及其子進程將默認屬於該控制組,因爲可以查詢可以使用屬於控制組的進程的PID列表它來跟蹤這些過程。

以這種方式使用cgruoups還有其他好處 - 例如跟蹤甚至限制此進程組使用的資源(CPU時間,IO帶寬等),凍結和重新啓動組的能力整體和更多。

CGroups正好是分佈式批處理作業管理系統HTCondor用於完成相同任務的機制,因此在這個主題上有很多與HTcondor相關的材料。例如見section in the HTCondor manualwiki post

祝你好運