3

我正在开发一个应用程序,它将定期从远程服务器为用户下载文件。我想知道我是否应该用 OS X 的说法使用守护进程,即只要 OS X 启动它就会运行,还是使用用户代理,即只要特定用户登录它就会运行。是有约定吗?思考这个问题时有什么规则可以遵守吗?我当然不想违背惯例,最终让我的应用程序做一些用户不希望它做的事情。

此外,对于这样的后台进程,似乎有约定让应用程序显示在状态栏上。例如,我的机器上的 Google 驱动器和 Mozy 都在后台监控更改和上传,两者都显示在状态栏中。这是我应该用我的应用程序做的事情吗?

4

2 回答 2

3

绝对有一个约定,adaemon通常以 root 或特殊用户 ( mysql, www) 身份运行,而 Agent 以用户身份运行...

它们的寿命等无关紧要,因为 adaemon可以像httpd,ftpd等那样长时间运行,也可以像在辅助工具中那样及时启动以供使用。

来自man launchd

在launchd 词典中,根据定义,“守护程序”是一种系统范围的服务,所有客户端都有一个实例。“代理”是基于每个用户运行的服务。守护进程不应尝试显示 UI 或直接与用户的登录会话交互。任何和所有涉及与用户交互的工作都应该通过代理完成。

因此,您可以与备份守护程序中的某种方式混合,IPC可以将消息发送到状态栏应用程序,该应用程序作为您的用户的代理运行。

于 2013-06-01T17:48:26.150 回答
1

守护进程与代理

UNIX Daemon- 作为后台进程运行的程序(.plist + 二进制)(如 Windows 中的服务)

Daemon是一个UNIX Daemon没有 GUI。launchd在系统启动时启动它(代表root)。*launchd也是守护进程 - pid 为 1,它创建所有其他进程。通常守护进程有-d后缀(例如launchdnsurlsessiond[About])。例如,守护进程可用于打印机、蓝牙...

Agent-UNIX daemon可以通过窗口服务器与 GUI 一起工作。使用定义的用户权限登录后代表用户launchd启动。agent例如日历、Skype...

launchd了解基于.plistin 的守护进程

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

[Java Daemon tread]

于 2021-02-25T15:06:58.803 回答