我正在开发一个应用程序,它会定期从远程服务器为用户下载文件。我想知道在OSX用语中是否应该使用守护进程,即只要OSX已经启动它就会运行,或者用户代理,即只要特定用户登录就会运行。是否有约定?在考虑这个时,有什么规则可以遵守吗?我当然不希望降压常规并最终让我的应用做一些用户不期望它做的事情。
此外,对于此类后台进程,似乎可能存在将应用程序显示在状态栏上的约定。例如。我的机器上有Google驱动器和Mozy,它们监视更改并在后台上传,两者都显示在状态栏中。这是我应该用我的应用做的事情吗?
答案 0 :(得分:2)
绝对有一种约定,daemon
通常以root身份运行,或者以特殊用户身份运行(mysql
,www
),代理以用户身份运行...
关于他们可以活多久等等并不重要,因为daemon
可以长时间运行,如httpd
,ftpd
等,或者及时启动使用,如帮助工具。
来自man launchd
:
在launchd词典中,根据定义,“守护进程”是系统范围的 服务有一个 所有客户的实例。 “代理”是基于每个用户运行的服务。守护进程不应该 尝试显示UI或直接与用户的登录会话交互。涉及的任何和所有工作 与用户交互应该通过代理进行。
所以你可以混合使用某种IPC
,因为备份守护进程可能会向状态栏应用程序发送消息,状态栏应用程序作为用户的代理运行。
答案 1 :(得分:1)
守护进程与代理
UNIX Daemon
- 作为后台进程运行的程序(.plist + binary)(如 Windows 中的服务)
Daemon
是一个没有 GUI 的 UNIX Daemon
。 launchd
在系统启动时启动它(代表 root
)。 *launchd
也是守护进程 - pid 是 1 个蚂蚁,它创建所有其他进程。通常守护进程有 -d
后缀(例如 launchd
、nsurlsessiond
[About])。例如守护进程可用于打印机、蓝牙...
Agent
- 是一个 UNIX daemon
,可以通过窗口服务器与 GUI 一起工作。 launchd
在使用定义的用户权限登录后代表用户启动 agent
。例如日历、Skype...
launchd
知道基于 .plist
的守护进程
User Agents ~/Library/LaunchAgents specific user
Global Agents /Library/LaunchAgents all users
System Agents /System/Library/LaunchAgents MacOS
Global Daemons /Library/LaunchDaemon installed apps
System Daemons /System/Library/LaunchDaemons MacOS