【问题标题】:Why does a Daemon randomly stop?为什么守护进程会随机停止?
【发布时间】:2010-09-06 12:09:49
【问题描述】:

这有点与previous, yet so far unsuccessful question of mine 有关。我有一个放置在 LaunchAgents 文件夹(在 Mac 上)中的守护程序,它应该在后台永久运行,但几天后它会无缘无故地停止。我不知道为什么,因此我的问题是:

守护程序可能随机停止的原因是什么?

感谢您的帮助!

【问题讨论】:

  • @Eiko,好点,但我在崩溃日志中看不到任何内容。您知道我可以验证它是否崩溃的任何其他方式吗?如果是这样,为什么它会崩溃?谢谢:)
  • 不确定是否有内容记录到控制台/系统日志中。也许尝试使用一个你早早崩溃的小守护进程。

标签: objective-c c cocoa macos daemon


【解决方案1】:

守护进程只是一个持久的(分叉的)进程。守护进程崩溃的原因与其他程序崩溃的原因相同:

  • 试图读取或写入内存 未分配用于阅读或 由该应用程序编写 (分段错误)或特定于 x86 (一般保护故障)
  • 试图执行特权或 无效指令
  • 正在尝试执行 I/O 操作 在它执行的硬件设备上 无权访问
  • 将无效参数传递给系统 来电
  • 试图访问其他系统 应用程序的资源 没有访问权限 (总线错误)
  • 正在尝试执行机器 带有错误论据的指令 (取决于 CPU 架构): 除以零,对 denorms 的操作 或 NaN 值,内存访问 未对齐的地址等。

【讨论】:

    【解决方案2】:

    由于它是一个 LaunchAgent,它作为您登录会话的一部分运行,因此如果您注销,它将被终止。

    另一方面,如果它在您注销之前就死机了,并且您无法找到/修复导致它崩溃/退出的任何原因,或者您可以通过添加来告诉 launchd 自动重新启动它

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

    到它的 .plist

    【讨论】: