VirtualBox 6.0でCentOS 8(3.10)を実行しています... WCHANについて2つの質問があります
「ps」のマニュアルページでは、WCHANを次のように説明します。
Blockquote nwchanプロセスが休止しているカーネル関数のWCHANアドレス(カーネル関数名が必要な場合はwchanを使用)。実行中のジョブは、この列にダッシュ(「-」)を表示します。
Blockquote wchan プロセスが休止中のカーネル関数の WCHAN 名、プロセスが実行中の場合は「-」、プロセスがマルチスレッドで、ps がスレッドを表示しない場合は「*」。
まだ「*」を見たことはありませんが、「ps」コマンドの出力に「?」が定期的に表示されることがわかります。通常、rcu_schedカーネルプロセスに関連付けられていますが、「?」は他のプロセスに表示されます。 「?」の定義が見つかりませんでした...どういう意味ですか?
2番目の質問は、「ps」コマンドの出力と「システムモニタ」GUIユーティリティの間に現れる違いについてです。 「ps」コマンドを実行すると、複数のプロセスが実行され、WCHANの下に「-」が表示されます。ただし、システム・モニターでは、同じプロセスが WCHAN コード "poll_schedule_timeout" を使用して実行されます。私が読んだところ、これはプロセスがI / Oを待っていることを示しています。このプロセスはスリープ状態ではありませんか?
答え1
「ps」出力の疑問符「?」
Linuxでは、「ps」のソースコードを確認していませんが、IMHO「?」は「ps」に値がわからない場合は常に使用されます。なぜ詳細がわからないと回答できない場合があります。
しかし、最も一般的な理由は、権限が不足しているためです。 「ps」プロセスのユーザーには、他のプロセスの詳細を読み取る権限がありません。他のプロセスの詳細は、たとえばディレクトリで確認できます/proc/PIDNUMBER/
。詳細を表示する権限がないと、起動した「ps」プロセスにも同じ権限の問題が発生します。
「ps」と「system monitor」の出力が異なります。
残念ながら、これについては正確に答えることはできません。実際、私はできますいつも「ps」、「システムモニタ」、または他のツールの2つのインスタンスが異なる出力を表示すると予想されます。現在のプロセスの状態。システム内のほとんどのプロセス状態が毎秒変わるからです! 「ps」などのツールを実行するたびに、その瞬間の状態のスナップショットを取得できます。
2つの「ps」インスタンスを同時に実行しようとしても、「ps」自体はLinux / Unixカーネルからいくつかの時間を取得するプロセスであるため、ほとんどすべてのシステムで出力が異なります。 ps" "プロセスは異なる時間に異なるプロセスからデータを取得するため、異なる値を取得します。
理論的には、システムに200個のCPUコアがあり、198個のプロセスしかない場合は、2つの(新しい)「ps」プロセスがあります。できる同じ出力を表示します。理論的には、両方のプロセスが独自のCPUコアで実行され、同時に起動された場合です。
テスト出力:
通常、プロセスの状態は頻繁に切り替わります。一定時間維持できる唯一の状態は「停止」です。これは、「ps」から「T」(sTopped)と表示されます。ここで、「ps」と「システムモニタ」を比較するには、プロセスに停止信号を送信し、そのプロセスの両方のツールのkill -STOP PIDNUMBER
出力を比較できます。比較後にプロセスを続行するには、を使用して「継続」信号を送信しますkill -CONT PIDNUMBER
。プロセスとして、「ps」出力(または「grep」ped)で簡単に見つけることができる「スリープ3600」などを使用できます。