Назад | Перейти на главную страницу

Вывод команды ps не отображает значения wchan в Fedora

Я бегаю Fedora 5.3.12-200.fc30.x86_64 и тестирование простых кодов клиент / сервер tcp. Я пробовал работать по-другому команды ps но я не могу отобразить какое-либо значение в чан поле, хотя в моем случае и сервер, и клиент находятся в приостановленном состоянии.


отредактировал

После дальнейшего тестирования похоже, что это зависит от дистрибутива. Kali и devuan вычисляют значение wchan, а Fedora и OpenSUSE Tumbleweed - нет. Кто-нибудь знает, почему это может быть так? Только запись в ядре, которую я нашел, соответствует значению wchan

(CONFIG_SCHED_OMIT_FRAME_POINTER = y)

настроен одинаково в кали, перекати-поле и федора. Я не смог найти этот параметр в девуане.


Ниже приведен вывод команды ps в Fedora. Независимо от того, что я делаю, wchan только показывает, что процесс запущен. Я пробовал запускать разные команды ps, отображающие все процессы, но значения wchan никогда не показывают ничего, кроме дефиса.

$ ps -o pid,ppid,wchan=WIDE-WCHAN-COLUMN -o comm -o stat -t pts/6 -t pts/7
   PID   PPID WIDE-WCHAN-COLUMN COMMAND         STAT
 58565   4247 -                 bash            Ss
102840  58565 -                 su              S
102848 102840 -                 bash            S
103048   4247 -                 bash            Ss
122844 102848 -                 tcpserv01       S+
122848 103048 -                 tcpcli01        S+
122849 122844 -                 tcpserv01       S+

Я проверил wchan в / proc, и все, что я получил, - 0.

$ cat /proc/122844/wchan
0

Strace сервера не передает accept (), чего я и ожидал.

# strace -p 122844
strace: Process 122844 attached
accept(3, 

Клиентский strace заблокирован в read (), как и ожидалось.

# strace -p 122848
strace: Process 122848 attached
read(0, 

Но они не отображаются в чанах. Что мне не хватает?



Кстати, у меня также есть FreeBSD (VM) на той же машине и в FreeBSD 12.0-RELEASE wchan показывает правильно при использовании команды ps, поэтому я почти уверен, что это как-то связано с Fedora.

$ ps aux -o pid,wchan=WIDE-WCHAN-COLUMN -o comm -o stat
USER  PID  %CPU %MEM   VSZ   RSS TT  STAT STARTED      TIME COMMAND          PID WIDE-WCHAN-COLUMN COMMAND          STAT
root   11 599.0  0.0     0    96  -  RNL  13:01   360:26.86 [idle]            11 -                 idle             RNL
root    0   0.0  0.0     0   528  -  DLs  13:01     0:00.01 [kernel]           0 swapin            kernel           DLs
root    1   0.0  0.0  9952  1016  -  ILs  13:01     0:00.01 /sbin/init --      1 wait              init             ILs
root    2   0.0  0.0     0    16  -  DL   13:01     0:00.00 [crypto]           2 crypto_w          crypto           DL


РЕДАКТИРОВАТЬ Я нашел следующее в человеке ps

-n Установить файл списка имен. Идентичен N. Файл списка имен необходим для правильного отображения WCHAN и должен точно соответствовать текущему ядру Linux для правильного вывода. Без этой опции путь поиска по умолчанию для списка имен: $ PS_SYSMAP ...

Итак, я установил

PS_SYSMAP=/boot/System.map-$(uname -r)

Но я по-прежнему не получаю никаких результатов от wchan. Если я попробую выполнить ту же команду, что и раньше, но с -n, я получу

$ ps -n -o pid,ppid,wchan=WIDE-WCHAN-COLUMN -o comm -o stat -t pts/2 -t pts/3 -t pts/4
   PID   PPID WIDE-WCHAN-COLUMN COMMAND         STAT
  4830   4829                 - bash            Ss
  6201   4829                 - bash            Ss
  6251   6201                 - tcpserv01       S+
  6252   4829                 - bash            Ss
  6292   6251                 - tcpse <defunct> Z+
  6356   6252                 - tcpcli01        S+
  6357   6251                 - tcpserv01       S+
  6481   4830                 - ps              R+

С параметром -n wchan даже не показывает дефис, как раньше.




РЕДАКТИРОВАТЬ 2 Ответ на следующий вопрос - нет. Ядро Kali настроило этот параметр точно так же, как Fedora, но в Kali вычисляются значения wchan. OpenSuse Tumbleweed ведет себя так же, как Fedora, не вычисляет значения wchan. Девуан вычисляет чан.

Могут ли отсутствовать значения wchan из-за

CONFIG_SCHED_OMIT_FRAME_POINTER: вывод WCHAN одной глубины

который в моем ядре настроен как

CONFIG_SCHED_OMIT_FRAME_POINTER = y