【问题标题】:OSX: Monitoring launchd, daemons and agentsOSX:监控 launchd、守护进程和代理
【发布时间】:2015-07-10 23:13:58
【问题描述】:

有没有一种方法可以监控 launchD 本身,即是否正在从 launchd 守护进程/代理列表加载或卸载作业?例如,任何管理应用程序都可以注册以在 launchD 守护程序加载或卸载新 plist 时接收事件,例如通过触发以下命令:launchctl load/unload /Library/LaunchDaemons(or launchAgents)/test.plist?

轮询是一种选择,但是否有任何资源有效的方式?

任何帮助都将不胜感激。

【问题讨论】:

    标签: objective-c macos launchd


    【解决方案1】:

    我不确定这是否正是您正在寻找的,但在 OSX 上有一个非常强大的工具,名为 dtrace。您可以使用它来查看系统上发生的各种事情并根据需要过滤它们,例如系统调用。

    根据您的具体情况,我什至会看一下dtruss,这是一个更易于使用的工具,它使用 dtrace 为您提供信息:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dtruss.1m.html 每次拨打launchctl 时从 dtruss 获得“提示”应该相当简单,但我不确定您想从通话中获得什么信息。

    dtrace 有整本关于如何使用它并为它写签名的书。如果您无法从dtruss 获得所需的一切,您可以进一步研究。

    也不是这两个都是命令行工具,如果您正在寻找程序化的东西,您将需要做更多的工作。

    【讨论】:

    • 我正在寻找的是当管理员用户尝试通过从命令行触发此命令来卸载我的守护进程时捕获事件:sudo unload xyz.plist..有没有办法从 dtruss 捕获此事件?
    • 我想说是的。如果您使用它查看launchctl 进行的所有系统调用,然后自己调用 unload,您可以看到您可以过滤到哪个系统调用。在这种情况下,dtrace 的一大优势可能是更容易看到您的 plist 文件何时被任何进程打开。
    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多