Jackdやそのクライアントなど、物理的な時間に依存するプログラムは、Linuxのラップトップのソフトウェアサスペンドではうまく機能しません。ソフトウェアが一時停止する前にクライアントを切断し、再開時に再接続することで、多くの「タイミングエラー」を発行し始めるクライアントを修正したいと思います。これは、システム構成を必要とせずに、クライアントから実行できますか?システムスクリプトを編集することでプログラムを強制終了できることは知っていますが、Linuxには、root権限なしでサスペンドイベントを直接待機するためのインターフェイスがありますか?物理的な時間に依存しているが、サスペンドを正しく処理するプログラムを知っていますか?
プログラムが物理的な時間に依存している場合は、とにかく定期的に時計をチェックする必要があります。これが、リアルタイム保証用のカーネルパッチを備えたバージョンのLinuxで実行されているリアルタイムプログラムでない限り、スケジューラによってプロセスの実行が任意の時間停止される場合があります。プロセスは、STOPシグナルによって停止される場合もあります(プロセスを再開するために送信されたCONTシグナルにハンドラーを配置することでプロセスを知ることができます)。
ソフトウェアが単に長い時間が経過したことを知る必要がある場合は、タイマーを設定してウェイクアップすることができます。ただし、提供する例では、それ以上のことを知る必要があります。たとえば、ネットワーク構成の変更を認識する必要があります。このようなプログラムの場合、システムの一時停止/再開イベントにフックすると、単に時間のスキップを検出するだけでなく、より多くの情報が得られます。
システムの一時停止/再開イベントに接続するには、root権限を使用するか、D-Busアクセスのあるセッション内で実行する必要があります。 (サブスクライブする必要のあるD-Busイベントがわかりません。)
システムのサスペンド/レジュームイベントにフックすると、レジュームだけでなくサスペンドでもコードを実行できるという利点があります。