Раздел Wchan в выводе ps ничего не показывает

Раздел Wchan в выводе ps ничего не показывает

Я знаю, что если процесс переходит в Dсостояние, то это означает, что он находится в непрерываемом состоянии. Процесс не может быть остановлен никаким сигналом. Он выйдет из этого состояния только при перезагрузке или если ожидание ввода-вывода закончится.

У меня много процессов в Dсостоянии, которое показывает, что в моей машине что-то не так. Также даже после перезагрузки они возвращаются в Dсостояние. Я поискал в интернете и обнаружил, что wchanраздел в выводе ps говорит о том, чего в ядре ждет мой процесс.

Когда я использую эту команду, ps axl| grep Dя попадаю -в столбец wchan, и в Интернете нет объяснения, что это значит.

Это мой пример вывода для приведенной выше команды.

0     0  69970      1  20   0  25064  1088 -      D    ?          0:00 ls -l

Я не могу понять, что -имелось в виду в приведенном выше выводе.

решение1

Существует несколько возможных причин, по которым wchan сообщается -как ps:

  • процесс просто не заблокирован в ядре, т.е. он запущен (см. stateстолбец ps)
  • the процедура обхода стекане удается из-за некоторых угловых случаев или условий гонки. Это может даже неуспешно безоговорочно, например, на ядрах, которые требуют правильных настроек указателя кадра, но были скомпилированы без них - проверьте это с cat /proc/*/wchan- все выходные данные 0 указывают на сломанную поддержку wchan (например, в настоящее время случай наФедора 31 и 32)
  • тыне имеюнеобходимостьразрешения режима доступа ptrace(а именно PTRACE_MODE_READ_FSCREDS) - маловероятно
  • the поиск символа не удалсяв ядре - маловероятно

Обратите внимание, что последняя psверсия считывает информацию wchan, из /proc/$pid/wchanкоторой вы можете получить прямой доступ cat, для более легкого тестирования. Этот файл считывает, 0если извлечение информации wchan не удалось, что psпреобразуется в -.

В системах, где wchanпроизошел сбой, следует поискать замену (требуется root):

cat /proc/$pid/stack

Или, в качестве альтернативы, обратитесь к (не требуются права root):

cat /proc/$pid/syscall

решение2

в новом ядре Linux вы видите, в какой функции ядра застрял ваш процесс

cat /proc/<pid_numer>/stack

решение3

Страница руководства для ps содержит следующую информацию: «-» означает, что процесс запущен. Имя WCHAN функции ядра, в которой процесс находится в спящем режиме, «-», если процесс запущен, или «*», если процесс многопоточный и ps не отображает потоки.

Связанный контент