【问题标题】:OSX: which type of Daemon/Background Process should I use?OSX:我应该使用哪种类型的守护进程/后台进程?
【发布时间】:2015-03-17 01:27:10
【问题描述】:

我有一个程序要在启动时运行并从睡眠中唤醒。但是,我找到了有关许多不同类型服务的资源,这些资源可能对我有用。对于哪种守护程序/后台服务最适合我的目的,我需要一个很好的答案。以下是关于我的程序的一些细节的概要:

1) 当计算机从睡眠状态唤醒、重新启动或从关机状态启动时,它将在后台(也就是用户不知道的情况下)自动启动。

2) 该程序将为每个用户单独运行。由于程序操作而创建的文件需要为每个用户分开。

我在 https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/DesigningDaemons.html#//apple_ref/doc/uid/10000172i-SW4-BBCBHBFB 找到了一个很好的资源,但我不确定要使用哪个:登录项、XPC 服务、启动守护程序或启动代理。

【问题讨论】:

  • 我确实需要用于设置和配置的 UI,但我不需要用于在启动和唤醒时运行的脚本的 UI。老实说,我需要能够编辑由守护程序/进程管理的脚本的设置和配置,并且在了解更多信息后,我可能会发现使用与守护程序/进程直接关联的 UI 的用途。如果可能,我可能希望能够编辑与每个用户关联的 D/P 设置。除此之外,我还需要一个 UI 来管理为当前用户安装的程序的设置,但我相信我可以使用 Java 来做到这一点。
  • 即使用户还没有登录,进程是否需要运行?
  • 我相信如果你的守护进程需要呈现一个用户界面,那么登录项基本上是唯一的选择。

标签: macos daemon background-process


【解决方案1】:

2) 该程序将为每个用户单独运行。由于程序操作而创建的文件需要为每个用户分开。

这强烈建议使用 LaunchAgent,因为它们是每个用户的(并以用户身份运行)。

您可能需要的页面是 launchd.plist 手册页。

我不知道与您的请求相匹配的启动触发器,不幸的是,这可能意味着您需要使用 KeepAlive 选项运行并监控电源变化。

您将在启动时捕获登录信息(虽然不是启动,因为这不是“每个用户”),所以这很容易。通过观察 NSWorkspaceWillPowerOffNotification NSWorkspaceWillSleepNotification 之类的通知,可以通过Cocoa 和NSWorkspace 轻松管理睡眠和关机。如果 Cocoa 对您的问题来说太高级了,您可以挂钩到 IOKit 电源管理事件。请参阅 IOKit 基础知识中的 Managing Power 以获得良好的低级介绍。

请注意,有一种称为 DarkWake 的“清醒但不是真的”状态,根据您的需要,它可能会使您感到困惑。 Power Management 上的 2012 WWDC 视频很好地介绍了这个问题。

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 2012-01-23
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多