Значения 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).

Другие вопросы по тегам