如何在快速用户切换时处理多个实例?

时间:2013-02-27 09:43:26

标签: objective-c macos launchd

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

LaunchAgent文件位于/ Library / LaunchAgents中,因此应用程序将为登录到该主机的所有用户启动。

这就是我想要的。

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

请帮我解决这个问题。 感谢

1 个答案:

答案 0 :(得分:3)

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

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

如果那是不可能的,你可以将你的应用分成两个过程;一个由launchd启动的匿名助手,它永远不会退出,其唯一的工作就是运行完整的应用程序,以及完整的应用程序本身。当系统切换离开当前用户时,您的完整应用程序可以退出,但帮助程序可以保持运行;当切换回来时,帮助者可以重新启动你的完整应用程序。

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

相关问题