objective-c - 在 Cocoa/Objective-C 中创建看门狗的原因和方法

标签 objective-c c cocoa macos watchdog

祝大家周一快乐!

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

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

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

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

有关于如何执行此操作的任何指示吗?我的应用程序是用 Objective-C 和 Cocoa 编写的,并在 Mac 上运行。

非常感谢!


编辑 1

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

  • -传输的字节
  • -键盘事件-
  • -鼠标事件-
  • -硬盘驱动器已用完的百分比
  • -具有键盘焦点的进程

...等等

它使用 Apple 开发者网站提供的低级 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>

再次感谢......


最佳答案

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

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

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

关于objective-c - 在 Cocoa/Objective-C 中创建看门狗的原因和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650003/

相关文章:

ios - 在 Xcode 中暂停 iPhone 游戏以防止中断

objective-c - MPMoviePlayerController 后台播放

ios - 使用 J2ObjC 和 GSON 库将 Swift 类序列化为 JSON

iphone - 使用 AccessToken 从 TabBarViewController 注销到 UIViewController

c - 加入 POSIX 线程返回 3

C 函数退出时函数指针参数不相同

c# - 这行 C 代码在 C# 中相当于什么?

iPhone:如何制作可扩展按钮(如弹出按钮)

objective-c - NSView子View添加到superView后不可见

objective-c - 禁用 WebView 中的拖动