中断時にタスクはどのように「フリーズを拒否」できますか?


17

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

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

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

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

回答:


25

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

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

「タスクがフリーズを拒否している」というメッセージが表示されている場合、それは、通常、チェックポイントできない何かをしているために、カーネルスレッドがフリーズを拒否していることを意味します。ただし、カーネルがサスペンドするまで数時間待たなければならないことは正常ではありません。ログメッセージのスタックトレースは、何が問題なのかを理解するのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.