Может ли ps отображать только неядерные процессы в Linux?

Как я могу попросить ps отображать только пользовательские процессы, а не потоки ядра?

Смотрите этот вопрос, чтобы понять, что я имею в виду …

6 Solutions collect form web for “Может ли ps отображать только неядерные процессы в Linux?”

Это должно сделать (под Linux):

 ps --ppid 2 -p 2 --deselect 

kthreadd (PID 2) имеет PPID 0 ( на Linux 2.6+ ), но ps не позволяет фильтровать PPID 0; таким образом, это обход.

Одним из способов распознавания процессов ядра является то, что они не используют пользовательскую память, поэтому поле vsz равно 0. Это также ловит зомби (благодаря Стефану Шазеласу за это наблюдение), которые можно устранить в зависимости от их статуса.

 ps axl | awk '$7 != 0 && $10 !~ "Z"' 

Чтобы указать только PID:

 ps -e -o pid= -o state= -o vsize= | awk '$2 != "Z" && $3 != 0 {print $1}' 

Одна из особенностей этих процессов заключается в том, что они не подкреплены исполняемым файлом, поэтому вы можете сделать ( в zsh ):

 ps /proc/[0-9]*/exe(^-@:h:t) 

Или с любой оболочкой POSIX:

 ps -p "$(find -L /proc/[0-9]*/exe ! -type l | cut -d / -f3 | paste -sd , -)" 

Это проверка процессов, /proc/<pid>/exe – ссылка на файл.

Но это означает, что вам нужно быть суперпользователем, чтобы проверить состояние /proc/<pid>/exe .

Изменить : Как это происходит, процессы зомби (по крайней мере) удовлетворяют одному и тому же условию, поэтому, если вы не хотите, чтобы они были исключены, вам придется добавить их обратно. Подобно:

 ps -p "$( { find -L /proc/[0-9]*/exe ! -type l | cut -d / -f3 ps -eo pid=,state= | sed -n 's/ Z//p' } | paste -sd , -)" 

Обратите внимание, что ps -f показывает имена процессов в квадратных скобках не потому, что они являются процессами ядра, а потому, что они имеют пустой argv[] (поэтому ps показывает имя процесса вместо argv[0] ). У вас может быть и пользовательский пространственный процесс с пустой argv[] и вы можете иметь имя процесса с argv[0] , имеющее форму [some-string] поэтому фильтрация вывода ps на основе этих квадратных скобок не является надежный опция.

На практике я нашел следующую идиому:

 ps auxf | grep -v ]$ 

Он фильтрует строки, заканчивающиеся на скобки, что может привести к пропущению нежелательных записей, но это очень маловероятно. Взамен это довольно легко запомнить и относительно быстро напечатать.

Некоторые процессы, такие как avahi-daemon, добавляют к их именам имя процесса в скобках (имя хоста в случае avahi-daemon) и будут отфильтрованы этой командой.

Для тех, кто пытается это делать в busybox, где ps сильно упрощается, а выход отличается, этот вариант отличного ответа Gilles хорошо работает:

 ps -o pid,user,comm,vsz,stat | awk '$4 != 0 && $5 !~ "Z"' 

Согласно ответам Гилла, методология здесь состоит в том, чтобы найти процессы, которые не используют какую-либо пользовательскую память (`vsz col == 0), и отфильтровывать процессы зомби (статус col не является« Z »).

Выводимые столбцы можно легко отрегулировать, если соответствующие номера полей awk на основе 1 будут соответствующим образом скорректированы. Посмотрите варианты, доступные вашим ps, добавив фиктивные значения, и он вам скажет. Например:

 $ ps -o foo ps: bad -o argument 'foo', supported arguments: user,group,comm,args,pid,ppid,pgid,tty,vsz,stat,rss 

Вы также можете просто проанализировать вывод ps и искать имена процессов, которые не указаны в скобках:

 ps aux | awk '$NF!~/^\[.+\]$/' 
  • Как получить tty, в котором работает bash?
  • Почему pgrep не может найти скрипты, запущенные через env?
  • Каков наилучший способ определить рабочий каталог для процесса UNIX с помощью «ps»?
  • Среднее использование ЦП процесса
  • Завершение скрипта оболочки bash, работающего в фоновом режиме
  • Top и ps не показывают тот же результат процессора
  • «Ps» вывод и комментарии
  • Почему wc получает неправильный результат с выходом из ps
  • Получение переходного PID из входа в поиск PS до его смерти
  • Как просмотреть все процессы предков?
  • Нужно получить командную строку всех запущенных демонов
  • Interesting Posts

    cyrus-imapd & SSL

    Воспроизведение компактных носителей

    В awk, как печатать диапазон полей с исходными разделителями $ 0 неповрежденными?

    Как получить scapy, чтобы нюхать на правильном интерфейсе?

    Прямой кеш записи / записи Linux USB Flash

    Как я могу добавить nohup в набор команд bash?

    Создайте список каждого пользователя, которому принадлежит файл в заданном каталоге, а также количество файлов и каталогов, которыми они владеют.

    Понимание структуры зеркала репозитория пакета Arch

    NFTables NAT не закреплен

    Linux Source Routing, Сильная модель конечной системы / Сильная модель хоста?

    Использование FC 19 – Как я могу взаимодействовать с очень длинными меню?

    Изменение размера (увеличения) основного раздела ОС

    Разделение большого PDF-файла на мелкие файлы

    / proc / self / maps – 3-й отображаемый фрагмент файла?

    Сортировка одного столбца по возрастанию и по убыванию другого столбца

    Linux и Unix - лучшая ОС в мире.