睡眠作業の場合、WCHAN = 0ですか?

睡眠作業の場合、WCHAN = 0ですか?

私が進行中のプロセスの状態は少し混乱しています。次のようになります。

$ ps -eal | head -n 1 ; ps -eal | grep perf
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  7843  7842  0  80   0 - 10838 -      pts/6    00:00:00 perf

-- 従って状態はありSmanページの説明はです。「S中断可能な省電力モード(イベントが完了するまで待機)」、イベントを待っています。どこか待機チャンネルに登録されているようです。ただし、スタンバイチャネルはですWCHAN -。どのmanページで説明する「ジョブを実行すると、この列にダッシュ('-')が表示されます。」

また、含まれて/proc/7843/status含まれます。私は同じことを言うと思います。仕事は何も待っていません。State: S (sleeping)/proc/7843/wchan00proc//wchan

私が何かを間違って理解したのでしょうか、それとも矛盾していますか?

-そして、ジョブが実際に実行されていません。これがwchan予約されるのを待っているという意味ではありません。

出力が正しく設定されていない可能性がありますかwchan?私はUbuntu 14.04、カーネル3.13.0-86-genericを実行しています。

他のプロセスを確認すると、次のようになります。

$ ps -eal | head -n 1 ; ps -eal | grep fish
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  2407  2399  0  80   0 - 47675 wait   pts/0    00:00:07 fish
1 S  1000  2409     1  0  80   0 -  5500 poll_s ?        00:00:00 fishd
0 S  1000  2507  2399  0  80   0 - 45333 poll_s pts/3    00:00:00 fish
0 S  1000  2567     1  0  80   0 -  8366 wait   ?        00:00:00 fish

- ではWCHANここでは問題ありません。

ベストアンサー1

プロセス状態とwchanはカーネルによって自動的に返されません。

これは、プロセス状態にアクセスしてwchan情報を取得する間に、その状態がスリープモードで実行中に変わる可能性があることを意味します。

だから競争があります。

これスタックウォーキングコースカーネル内でwchan情報を取得することも問題があり、すべてのケースを扱うことはできません。

クロスチェックcat /proc/$pid/stack(ルートのみ)、またはcat /proc/$pid/syscallプロセスがカーネルのどこにあるかに関する追加情報を取得できます。

おすすめ記事