macos - OS X 应用程序可以检查调用它的 launchd plist 吗?

标签 macos cocoa plist launchd

我正在编写一个应用程序,该应用程序可能会被多个 launchd 作业调用 - 也就是说,可能有两个不同的 LaunchAgent .plist 文件调用具有不同程序参数或不同条件的应用程序。我希望应用程序能够检查作业或作业的 .plist,以便它可以根据在那里找到的内容调整其行为。

特别是,假设程序 foo 可以从 A.plistB.plist 启动,我想要程序能够根据调用它的作业/plist 保留不同的状态。如果我能做的就是检测作业的(假定不同的)Label,那就足够了(尽管越多越好)。

最明显的方法是在作业的 ProgramArguments 数组中使用不同的标志,或者在 EnvironmentVariables 中设置不同的值,但这两种方法都感觉很脆弱,两者都意味着配置位的重复,并且都需要额外的文档(“将 Label 的值复制到 EnvironmentVariables 字段 FOO...;不要问为什么”)。

我可以看到函数SMJobCopyDictionary 。这样,我似乎就可以访问该职位的字典了——也就是说,这些信息原则上是可用的——但我需要首先知道该职位的标签。函数 SMCopyAllJobDictionaries 允许我迭代所有作业,但如何找到调用应用程序特定实例的作业并不明显。

谷歌搜索 launchd read job labellaunchd self dict (或类似的)不会得到任何有用的信息。

最佳答案

看看SampleD code在苹果网站上。此代码显示守护进程如何访问调用 launchd 信息。

查看launch.h标题,我怀疑 LAUNCH_JOBKEY_LABEL 就是您想要的。

关于macos - OS X 应用程序可以检查调用它的 launchd plist 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338636/

相关文章:

c - 辅助线程中的信号处理

macos - 是否可以像IPC一样使用Mac OS X XPC在进程之间交换消息?如何?

objective-c - 有人可以帮我发现这个 NSPipe/NSFileHandle 代码中的泄漏吗?

objective-c - cocoa 获取已安装应用程序列表

c++ - 如何强制 Mac 窗口到前台?

ios - 如何在 Xcode 中读取 plist 并根据其内容创建不同的数组

ios - 正确地将 info.plist 条目转换为 NS* 类型

objective-c - 迪尔德 : Symbol not found: __NSConcreteGlobalBlock after updating to OSX 10. 8

OS X 应用程序的 XCode 5 远程调试

ios - 以编程方式创建的 plist 并尝试通过 Apple 的指南读取,要么无法正确创建,要么无法正确读取