2

我有一个 LaunchAgent 应用程序,它在用户登录系统时启动。

LaunchAgent 文件位于 /Library/LaunchAgents 中,因此应用程序会为登录到系统的所有用户启动。

这就是我真正想要的。

但问题是,当我使用快速用户切换并登录到另一个用户时,活动监视器显示应用程序正在为两个用户运行。 我想要的是只有当前用户的实例应该一直存在。并且一旦我切换用户,前一个实例就应该退出。

请帮助我。谢谢

4

1 回答 1

3

您可以使用 Carbon 或 Cocoa 监听用户切换 - 请参阅多用户环境编程指南中的用户切换通知。但是,如果您在收到用户切换通知时退出进程,那么当系统切换回时,launchd 不会为您重新启动它。

处理此问题的最简单方法是确保您的应用程序可以在系统从用户的登录会话切换时关闭需要由用户独占使用的任何资源,并在您收到系统通知时重新打开它们正在返回该会话。

如果这不可能,您可以将您的应用程序分成两个进程;一个由 launchd 启动的不露面的助手,它永远不会退出,它唯一的工作是运行你的完整应用程序,以及完整的应用程序本身。当系统切换离开当前用户时,您的整个应用程序可以退出,但助手可以继续运行;切换回来时,助手可以重新启动您的完整应用程序。

最后,当当前登录会话切换时,launchd 采取行动听起来像是有用的功能——考虑在 Apple 的错误跟踪器上提交功能请求。

于 2013-02-28T04:46:16.400 回答