加快launchctl执行速度


2

我已经设置了一堆脚本,当我在家里连接我的霹雳码头时需要发生这种情况(禁用wifi,启用蓝牙......)。

为了检测霹雳码头,我使用了以下launchctl服务:

<?xml version="1.0" encoding="UTF-8"?>                                                                   
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>romeovs.dock.agent</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/romeovs/.bin/dock/run.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>LaunchEvents</key>
    <dict>
        <key>com.apple.notifyd.matching</key>
        <dict>
            <key>com.apple.system.config.network_change</key>
            <dict>
                <key>Notification</key>
                <string>com.apple.system.config.network_change</string>
            </dict>
        </dict>
    </dict>
</dict>
</plist>

此服务侦听launchd是否发生网络更改(检测连接到扩展坞的有线网络)。此设置似乎有效,但在连接扩展坞时检测和操作非常慢。

设置dock网络需要很长时间,但之后在脚本实际调用之前还需要5秒钟。

有没有办法让服务更快地检测到网络变化(没有设置轮询服务)?

Answers:


1

延迟最有可能在通知中心内; 该notifyd服务是不是时间的关键。

考虑使用观察IOKit级别通知的进程。在IOKit层,会立即调度通知,并为响应硬件更改的进程设计通知。

尝试使用GrowlHardwareGrowler添加来触发您的脚本。


我不喜欢再次安装Growl所以我正在调查你给出的IOKit建议。是否可以使用launchd?监听硬件操作?
罗密欧斯

launchd.plist手册页表明,它是不可能的,无需外部过程或工具; developer.apple.com/library/mac/documentation/Darwin/Reference / ...
Graham Miln 2014年

这个答案似乎表明可以从内部检测usb事件luanchd。它似乎也可以检测雷电事件似乎是合理的,但我似乎无法找到正确的语法。
罗密欧斯

考虑专门针对此功能提出第二个问题。你将更有可能吸引那些知道答案的人。
Graham Miln 2014年

是的我已经找到了解决方案。您可以在我的后续问题中看到我是如何做到的。
罗密欧斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.