Process

WCHAN = 0 用於睡眠任務?

  • November 7, 2020

我對我擁有的程序的狀態有點困惑。它看起來像這樣:

$ 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確實 containsState: S (sleeping)/proc/7843/wchancontains 0。我猜0inproc//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的計算錯誤。

引用自:https://unix.stackexchange.com/questions/286890