【问题标题】:How to handle multiple instance on fast user switching?如何在快速用户切换时处理多个实例?
【发布时间】:2013-02-27 09:43:25
【问题描述】:

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

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

这正是我想要的。

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

请帮助我。 谢谢

【问题讨论】:

  • 不管怎样,不能保证只有一个用户处于活动状态。屏幕共享现在允许某人使用一个帐户登录和使用计算机,而其他人同时使用另一个帐户在本地使用计算机

标签: objective-c macos launchd


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢@jatoben。目前我正在使用用户切换通知来停止非活动会话中的进程。关于对 Apple 的功能请求,目前我确实有一些简单功能的列表,如果操作系统可以直接处理,这将是很好的,并且可以避免我们编写很多条件来处理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多