Я бегаю 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