依赖于物理时间的程序,例如 jackd 及其客户端,不能很好地与 Linux 中笔记本电脑的软件挂起配合使用。我想通过让它在软件暂停之前断开连接并在恢复时重新连接来修复开始发出大量“计时错误”的客户端。是否可以从客户端完成此操作,而无需进行系统配置?我知道我可以通过编辑系统脚本来终止程序,但是Linux中有没有一个接口可以直接等待挂起事件,并且无需root权限?您是否知道依赖于物理时间但正确处理挂起的程序?
答案1
如果程序依赖于物理时间,则无论如何它都必须定期检查时钟。除非这是在具有实时保证的内核补丁的 Linux 版本上运行的实时程序,否则调度程序可能会在任意长度的时间内停止进程的执行。进程也可能被 STOP 信号停止(它可以通过在发送来恢复它的 CONT 信号上放置一个处理程序来知道这一点)。
如果软件只需要知道已经过去了很长一段时间,它可以设置一个计时器来唤醒它。但是,您给出的示例需要了解的不仅仅是这些:例如,它需要了解网络配置更改。对于这样的程序,挂钩系统挂起/恢复事件比仅仅检测时间跳跃提供更多信息。
挂钩系统挂起/恢复事件需要 root 权限,或者在具有 D-Bus 访问权限的会话中运行。 (不知道你需要订阅哪些D-Bus活动。)
挂钩系统挂起/恢复事件的优点是您可以在挂起时运行代码,而不仅仅是在恢复时运行代码。