Значения WCHAN в пс
Что конкретно означает WCHAN (канал ожидания)? что может быть его значением и что представляют эти значения? Я пытался их найти, но ничего не получил.
1 ответ
От man ps
, раздел Standard Format Specifiers
:
nwchan WCHAN address of the kernel function where the process
is sleeping (use wchan if you want the kernel
function name). Running tasks will display a
dash ('-') in this column.
wchan WCHAN name of the kernel function in which the process
is sleeping, a "-" if the process is running, or
a "*" if the process is multi-threaded and ps is
not displaying threads.
Как видно, они являются функциями ядра, используемыми в настоящее время процессом. В дальнейшем:
-n namelist
Set namelist file. Identical to N. The namelist file is needed
for a proper WCHAN display, and must match the current Linux
kernel exactly for correct output. Without this option, the
default search path for the namelist is:
$PS_SYSMAP
$PS_SYSTEM_MAP
/proc/*/wchan
/boot/System.map-$(uname -r)
/boot/System.map
/lib/modules/$(uname -r)/System.map
/usr/src/linux/System.map
/System.map
Вы можете проверить /boot/System.map-$(uname -r)
в Ubuntu для списка функций:
$ sudo head /boot/System.map-$(uname -r)
0000000000000000 D __per_cpu_start
0000000000000000 D irq_stack_union
0000000000000000 A xen_irq_disable_direct_reloc
0000000000000000 A xen_save_fl_direct_reloc
00000000000001e0 A kexec_control_code_size
0000000000004000 d exception_stacks
0000000000009000 D gdt_page
000000000000a000 D espfix_waddr
000000000000a008 D espfix_stack
000000000000a020 D cpu_info
Обратите внимание, что этот ответ в основном устарел: вам никогда не понадобится список имен или
System.map
больше.
ps
в
procps-ng
читает
/proc/${pid}/wchan
напрямую, вместо чтения 30-го поля (wchan) из
/proc/${pid}/stat
и декодировать его по файлу карты символов.
Фактически, некоторые ядра могут устанавливать поле wchan для
/proc/${pid}/stat
в 1 вместо реального значения, чтобы скрыть детали рандомизации адресного пространства ядра.
(Я сталкиваюсь с некоторыми странными проблемами с wchan в Fedora 32, см. Ошибку Fedora 1879450).