macos - 没有网络连接时启动 NetworkState

标签 macos plist launchd keep-alive network-state

任何熟悉 Mac OS X 上的 launchd 的人,特别是 KeepAlive 部分中的 NetworkState (bool) 键.plist 文件?

man 页面中,launchd 应该在 Mac 上没有网络连接时调用可执行文件,当 plist 配置如下时:

...
<key>KeepAlive</key>
<dict>
    <key>NetworkState</key>
    <false/>
</dict>
...

这似乎工作正常,但是,一旦建立了有效的网络连接(定义为 Mac 至少具有一个非环回 IPv4/6 地址),launchd 应该 停止调用可执行文件(因为 NetworkState 标志应该阻止它)。

不过,我看到的行为是 launchd 一直调用我的程序,不管 Mac 的网络连接如何!就好像 launchd 完全忽略了 NetworkState 标志。

有谁知道如何让 launchd 仅在没有网络连接时调用程序,并在建立网络连接后停止调用它?

最佳答案

一段时间以来,我一直在努力解决同样的问题,今天我终于意识到自己的误解。

当 KeepAlive 的任何条件评估为真时,这意味着“确保此进程正在运行”。如果它们的计算结果都不为真,则意味着“确保此进程正在运行”,而不是像我希望的那样“确保此进程正在运行”。

关于macos - 没有网络连接时启动 NetworkState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797152/

相关文章:

objective-c - NSTimer 作为闹钟

apache2 - MacPorts Apache2 在启动时停止启动

objective-c - Cocoa 分布式对象,长轮询,launchd 和 Activity Monitor 中的 "Not Responding"

xml - excel 到 cocoa 中的 plist 转换,反之亦然

macos - 当您的代码作为 LaunchDaemon 运行时,如何在不重新启动的情况下首次启动 LaunchAgent?

keyboard - 以编程方式将键盘快捷键添加到 Mac 系统偏好设置

bash - 使用相对路径压缩文件?

xcode - 将可执行文件从应用程序包移动到系统位置

iphone - 如何将值添加到属性列表字典内的字典

ios - 在Objective-C中,如何做一个所有人都可以访问的全局配置?