ps出力のWchanセクションに何も表示されない

ps出力のWchanセクションに何も表示されない

プロセスが状態に入るとD、割り込み不可能な状態になることを意味します。プロセスは、どのシグナルによっても終了できません。再起動時または I/O 待機が終了した場合にのみ、その状態から抜け出します。

Dマシンに何か問題があることを示す状態にあるプロセスが多数あります。また、再起動後も状態が元に戻ります。オンラインで検索したところ、 ps 出力のセクションに、プロセスがカーネル内で何を待機しているかが示されていることがDわかりました。wchan

このコマンドを使用すると、 wchan 列ps axl| grep Dが表示されます-が、これが何を意味するのかオンラインでは説明がありません。

これは上記のコマンドのサンプル出力です。

0     0  69970      1  20   0  25064  1088 -      D    ?          0:00 ls -l

-上記の出力の意味が理解できません。

答え1

-wchan が次のように報告される理由はいくつか考えられますps:

  • プロセスはカーネル内でブロックされていない、つまり実行中である(psstate列を参照)
  • スタックウォーキング手順コーナーケースまたは競合状態が原因で失敗します。適切なフレームポインタ設定を必要とするカーネルで、それなしでコンパイルされた場合など、無条件に失敗することもあります。cat /proc/*/wchanすべて0の出力はwchanサポートが壊れていることを示します(現在、フェドラ 31 および 32
  • あなた持っていない必要なptrace アクセスモード権限(すなわちPTRACE_MODE_READ_FSCREDS) - ありそうもない
  • シンボル検索が失敗するカーネル内 - ありそうにない

最近のバージョンでは、テストを容易にするために、で直接アクセスできるpswchan 情報も読み取られることに注意してください。wchan情報の取得に失敗した場合にそのファイルが読み取られ、に変換されます。/proc/$pid/wchancat0ps-

が壊れているシステムでは、wchan代替策として以下を参照してください (ルートが必要です):

cat /proc/$pid/stack

または、次の方法を参照してください (ルート権限は必要ありません)。

cat /proc/$pid/syscall

答え2

新しいLinuxカーネルでは、プロセスがどのカーネル関数で停止しているかがわかります

cat /proc/<pid_numer>/stack

答え3

ps のマニュアル ページには、この情報が記載されています。"-" はプロセスが実行中であることを意味します。プロセスがスリープしているカーネル関数の WCHAN 名。プロセスが実行中の場合は "-"、プロセスがマルチスレッドで ps がスレッドを表示していない場合は "*" になります。

関連情報