2010-09-06 54 views
2

歡樂的星期一給大家!爲什麼以及如何在可可中創建看門狗/ Objective-C

這是我的情況。任何幫助非常感謝!

我已經創建了一個可執行文件,當它安裝到機器的啓動代理文件夾中時。理論上它應該永遠運行,每秒收集一次數據。它可以在機器睡着時停止,但在重新啓動計算機時重新啓動。

這是我的問題:有時程序只是自發地停止,通常在幾天的運行後。如果重新啓動計算機,則程序將重新啓動,並在出現相同問題之前再運行一段時間。

我不知道這個問題的原因,但一個朋友告訴我,我可以創建一個'看門狗',每分鐘都會檢查我的可執行文件是否正在運行。如果不是,那麼看門狗將重新啓動可執行文件。

任何指針如何做到這一點?我的應用程序是用Objective-C和Cocoa編寫的,並在Mac上運行。

非常感謝!


編輯1

我將解釋應用程序是如何工作的我最大的能力。這基本上是用C語言編寫和Objective C的方法的集合,查詢有關係統每秒信息:

  • -bytes傳輸
  • - 鍵盤活動 -
  • -mouse活動 -
  • -percentage硬盤的使用了
  • -Process具有鍵盤焦點

...等。

它使用Apple開發人員網站提供的低級別API執行此操作。它每秒將信息寫入文件。每小時文件被壓縮並創建一個新文件。

請詢問是否需要更多的澄清:)


EDIT 2

對於那些誰是想知道,這裏又是

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.Intel</string> 
    <key>OnDemand</key> 
    <true/> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Library/LaunchAgents/Contents/Intel</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
</dict> 
</plist> 

感謝plist文件.. ..


+0

如果您告訴我們您現在正在做什麼,您可能會獲得更好的運氣。 – jer 2010-09-06 08:50:03

+0

@jer,謝謝你的關注。不確定你想要澄清的是什麼。我的可執行文件是一個收集數據的程序,比如每秒發送的字節數。它是一個啓動時啓動的守護進程,因爲它放置在啓動代理文件夾中,並帶有plist文件。任何意見讚賞。 – 2010-09-06 10:22:48

+0

我要求的是你概述你的程序,不是說它存在,而是因爲你正在尋求替代品時它是如何做的,最好我們知道現在是如何做的。 – jer 2010-09-06 10:39:59

回答

4

您可以使用launchd作爲看門狗。只需以下鍵值對添加到您的launchd plist文件:

<key>KeepAlive</key> 
<true/> 

這將確保,如果它崩潰,否則終止您的進程將重新啓動。 (但是,如果您的進程掛起,則無助。)有關KeepAlive和其他啓動密鑰的完整文檔,請在終端中運行「man launchd.plist」。