【问题标题】:The Why and the How of Creating a Watchdog in Cocoa/Objective-C在 Cocoa/Objective-C 中创建看门狗的原因和方法
【发布时间】:2010-09-06 08:28:37
【问题描述】:

祝大家周一快乐!

这是我的情况。非常感谢任何帮助!

我创建了一个可执行文件,安装后它会被放置在机器的 Launch Agents 文件夹中。从理论上讲,它应该永远运行,每秒收集数据。它可以在机器睡眠时停止,但在重新激活计算机时重新启动。

这是我的问题:有时程序会自发停止,通常是在运行几天后。如果重新启动计算机,则程序会重新启动并再次运行一段时间,然后才会出现相同的问题。

我不知道这个问题的原因,但一位朋友告诉我,我可以创建一个“看门狗”,每分钟都会检查我的可执行文件是否正在运行。如果不是,那么看门狗将重新启动可执行文件。

关于如何做到这一点的任何指示?我的应用是用 Objective-C 和 Cocoa 编写的,可以在 Mac 上运行。

非常感谢!


编辑 1

我将尽我所能解释该应用程序的工作原理。它基本上是用 C 和 Objective C 编写的方法的集合,每秒查询有关系统的信息:

  • -传输的字节数
  • -键盘活动-
  • -鼠标活动-
  • -硬盘使用百分比
  • -具有键盘焦点的进程

...等等。

它使用 Apple Developer 网站提供的低级 API 来执行此操作。它每秒将信息写入一个文件。每小时压缩文件并创建一个新文件。

请询问是否需要更多说明:)


编辑 2

对于那些想知道的人,这里是 plist 文件

 <?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>

再次感谢....


【问题讨论】:

  • 如果您告诉我们您现在的工作情况,您可能会获得更好的运气。
  • @jer,感谢您的关注。不太确定你想要澄清什么。我的可执行文件是一个程序,它每秒收集传输的字节数等数据。它是一个在启动时启动的守护程序,因为它被放置在带有 plist 文件的 Launch Agents 文件夹中。任何建议表示赞赏。
  • 我要的是你概述你的程序,而不是它是否存在,而是它目前的工作方式,因为你要求替代方案,最好我们现在知道它是如何完成的。
  • 发布 plist 文件。这是控制任何已启动代理的最重要的方面!
  • Eric Brotto:您还没有完全指定代理的标识符;您在“com.intel”处停了下来,但没有在其后放置至少第三个组件。另外,“/Library/LaunchAgents/Contents/Intel”是什么路径?您是否真的在 LaunchAgents 文件夹的 Contents 文件夹中安装了您的代理可执行文件? LaunchAgents 文件夹应该只包含启动代理 plist;根据您程序的架构,您应该将它放在 prefpane 中或 /Applications 中的应用程序中。

标签: objective-c c cocoa macos watchdog


【解决方案1】:

您可以使用 launchd 作为看门狗。只需将以下键值对添加到您的launchd plist 文件中:

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

这将确保您的进程在崩溃或以其他方式终止时会重新启动。 (但是,如果您的进程挂起,这将无济于事。)有关 KeepAlive 和其他启动密钥的完整文档,请在终端中运行“man launchd.plist”。

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 2012-08-06
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    相关资源
    最近更新 更多