2013-01-23 120 views
5

我正在尋找一種方法來監視OS X上的其中一個應用程序的狀態。我需要監視的組件有很多,例如各種通信通道的狀態。如果它們停止運行,監視過程應該能夠在屏幕上和通過推送通知來警告用戶。如何監視OS X上的進程?

XPC服務看起來很有希望,但如果應用程序崩潰,我認爲這也會將服務取消,或者我誤會了嗎?

我的首選解決方案是監視意外終止,並重新啓動應用程序,如果它發生。

這樣做的最好方法是什麼?

回答

0

如果每個進程都在其自己的線程中運行,則可以運行一個監視程序來監視線程是否處於活動狀態。在循環中運行ps並分析輸出的腳本可以做到這一點。

您可以看到各種選項here。例如,請參見-C以通過命令名稱進行選擇,並請參閱-m以顯示所有線程。

1

我想你可能利用內置的設施Launchd和CrashReporter來實現您的要求。

Launchd是OS X系統管理程序,用於啓動和監視後臺進程,通常用於運行XPC服務。的launchd劑可以反應以各種系統事件,並且可以被配置爲重新啓動他們崩潰的事件處理

的launchd可以設置爲以各種系統事件如發射事件作出反應(通過在property listKeepAlive/SuccessfulExit鍵指定),包括監視文件和目錄,預定時間或監聽網絡連接。

CrashReporter是捕獲和記錄所有進程崩潰的OS X系統工具。它通過AppleSystemLogger facility進行登錄,並且可以通過鏈接技術說明中記錄的syslog工具進行訪問。在Mountain Lion上,用戶進程崩潰報告以~/Library/DiagnosticReports/結尾,每個崩潰事件創建一個crashlog和plist文件對。

我認爲你可以通過幾種方式來實現你的需求,如果launchd負責運行xpc服務,它可以承擔在崩潰事件中重新啓動它們的責任,並且它們可以與任何應用程序分離崩潰。

您可以通過監視崩潰報告目錄(例如,使用QueueDirectories屬性)獲取新日誌並重新啓動應用程序或顯示通知,來編寫響應崩潰事件的launchd代理程序。