私が進行中のプロセスの状態は少し混乱しています。次のようになります。
$ 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
-- 従って状態はありS
、man
ページの説明はです。「S中断可能な省電力モード(イベントが完了するまで待機)」、イベントを待っています。どこか待機チャンネルに登録されているようです。ただし、スタンバイチャネルはですWCHAN -
。どのman
ページで説明する「ジョブを実行すると、この列にダッシュ('-')が表示されます。」
また、含まれて/proc/7843/status
含まれます。私は同じことを言うと思います。仕事は何も待っていません。State: S (sleeping)
/proc/7843/wchan
0
0
proc//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
プロセスがカーネルのどこにあるかに関する追加情報を取得できます。