私は「Linuxホスト名2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18 18:40:08 UTC 2009 i686 GNU/Linux」を使用しています。
すべてのクライアントコンピュータはシンクライアントを使用し、私は仕事用にラップトップを使用し、サーバーからラップトップにホームディレクトリをマウントします。
ノートブックでFirefoxを開くと、プロセスが「D」状態で他のすべてのユーザーコンピュータがフリーズし、lockdプロセスが「D」状態になっているため、Firefoxウィンドウは開きません。
PS:Firefox |
1 6187 4313 4313 ? -1 D< 1030 3:16 /usr/lib/firefox-3.5b4pre/firefox-3.5
7610 7622 7621 7610 pts/3 7621 S+ 1030 0:00 grep firefox
システムログを確認すると
7月13日10:35:56ホスト名カーネル:[222583.872059] lockd:ラップトップを監視できません。
7月13日10:35:57ホスト名カーネル:[222583.872059] lockd:ラップトップを監視できません。
PS ajx grepロック|
ルート9178 0.0 0.0 0 0? D< 13:35 0:00 [ロック]
root11039 0.0 0.0 3340 796ポイント/3 S<+ 14:18 0:00 grep lockd
すべてのクライアントコンピュータには同じメッセージがあります。
プロセスはいつ「D」状態に入りますか?
lockdプロセスはいつ「D」状態に入りますか?
lockdプロセスの目的は何ですか?
答え1
D Uninterruptible sleep (usually IO)
この状態では、プロセスはすぐに信号を処理するために目覚めません。これがデバイスを扱うときに取ることがI/O
できる唯一の方法です(そうしないと、データが破損する可能性があります)。
答え2
D
状態コードは、プロセスが進行中であることを示します。邪魔されない睡眠。
- 通常、これはI / Oによって引き起こされます。
lockd
NFS ロックを管理するカーネルデーモンです。
問題はNFS通信に関連している可能性があります。
答え3
他の回答の内容にもかかわらず、D状態が必ずしも作業が中断されないことを意味するわけではありません。たとえば、多くのD状態プロセスは、端末信号を受信すると実際に終了します。テストのいくつかの例を読むことができます。本文から。
Linuxでは、TASK_KILLABLE
フラグを設定して多くのD状態を入力します。
linux % git grep -ihc _killable | paste -sd+ | bc
539
TASK_KILLABLE
シグナルインタラクションからプロセスを保護する必要がある場合がありますが、もはやユーザースペースコマンドを実行せずにプロセスが終了するという事実だけを知る必要がある場合がありました。たとえば、DMAが実行されていないD状態(例vfork()
:)では、不安定な動作条件を防ぐためにブロックする必要がありますが、次の作業を実行したい場合は待機し続ける理由はありません。終了 - これは時間とプロセスの無駄です。
完全に中断できない代わりにTASK_KILLABLE
シグナルを受信した場合は、シグナルが致命的であるかどうか(つまり、キャッチできない致命的なシグナルであるかどうか、またはプログラムにデフォルトの端末構成ハンドラーを使用してシグナルのユーザースペースがないことを確認してください)。ユーザースペースコマンドを実行できなくなるようにプロセスを終了します。
D状態プロセスは、追加のユーザースペースコマンドを実行できないプロセスを表しますが、すべての信号をブロックすることはこれを達成する方法の1つの説明に過ぎず、すべての場合に必要なわけではありません。