Process
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
- 所以,狀態是
S
,man
頁面描述為*“S 可中斷睡眠(等待事件完成)”,它正在等待某個事件。我假設它列在某個等待頻道中。但是等待通道是:WCHAN -
. 哪個man
頁面描述了“正在執行的任務將在此列中顯示破折號 (’-’)。”*另外,
/proc/7843/status
確實 containsState: S (sleeping)
和/proc/7843/wchan
contains0
。我猜0
inproc//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
沒問題。
WCHAN 值似乎是計算出來的。從核心來源
arch/x86/Kconfig
:config SCHED_OMIT_FRAME_POINTER Single-depth WCHAN output Calculate simpler /proc/<PID>/wchan values. If this option is disabled then wchan values will recurse back to the caller function. This provides more accurate wchan values, at the expense of slightly more scheduling overhead.
並從
Documentation/filesystem/proc.txt
:wchan Present with CONFIG_KALLSYMS=y: it shows the kernel function symbol the task is blocked in - or "0" if not blocked.
所以我猜有時wchan的計算錯誤。