web-dev-qa-db-ja.com

サスペンド時にタスクで「フリーズを拒否」するにはどうすればよいですか?

昨日、ラップトップを閉じると、すぐにスタンバイモードになりませんでした。ログによると、それは試みていましたが、タスクはフリーズを拒否しました:

Freezing of tasks failed after 20.005 seconds (1 tasks refusing to freeze, wq_busy=0):

これは、システムが実際に停止するまで数時間続きました。 syslogこの質問 のようなメッセージでいっぱいでした。systemdが何度も試行していたためです。

これはどうして起こりますか?スケジューラがそのアプリケーションのスケジューリングを停止できないのはなぜですか?そしてそれは効果的に凍結されていますか?複数のSTOPコマンドがあり、そのうちの1つは適切に要求され、1つは強制的にフリーズされます。なぜsystemdがこれを使用しなかったのか、またはなぜこれがここで機能しなかったのですか?

18
piegames

タスクのフリーズは詳細に文書化されています カーネルのドキュメントに

ユーザー空間プロセスは凍結を拒否できません。それらはフリーズしますが、カーネルとプロセス間のシグナリングはシグナル処理コードによって自動的に処理されます(フリーズは偽のシグナルを使用します)。

「タスクがフリーズを拒否しています」というメッセージが表示された場合は、カーネルスレッドがフリーズを拒否しています。ただし、カーネルが一時停止するまで数時間待つ必要はありません。ログメッセージのスタックトレースは、何が問題かを把握するのに役立ちます。

26
Stephen Kitt