Посчитать количество процессов запущенных пользователем user и вывести в файл пары

Обновлено: 06.07.2024

На сайте уже есть несколько статей про процессы Linux, в которых подробно описано как ими управлять или как завершить один или группу процессов, но это еще не все. Чтобы правильно управлять процессами и ориентироваться в них вам нужно научиться анализировать список процессов Linux, понимать что значит каждый пункт и зачем он нужен.

В этой статье мы подробно рассмотрим как посмотреть список процессов различными способами, разберем какими бывают процессы, почему так происходит и что с этим делать.

Список процессов в Linux

Я не буду подробно рассказывать про каждую команду, которую можно применять для просмотра списка запущенных процессов, вместо этого мы пройдёмся по основным утилитам для решения этой задачи, рассмотрим как посмотреть список потоков процесса, вывести процессы, которые выполняются на определённом ядре, а также как найти скрытые процессы. Но сначала надо разобраться с терминами.

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

1. Утилита ps

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

Но вряд-ли вас интересует именно это. Чтобы посмотреть все процессы, добавьте опцию -e, а для максимально подробной информации - опцию -F:


Вот значение основных колонок в выводе утилиты:

  • UID - имя пользователя, от имени которого работает процесс;
  • PID - идентификатор пользователя;
  • PPID - идентификатор родительского процесса пользователя;
  • C - расходование ресурсов процессора, в процентах;
  • SZ - размер процесса;
  • RSS - реальный размер процесса в памяти;
  • PSR - ядро процессора, на котором выполняется процесс;
  • STIME - время, когда процесс был запущен;
  • TTY - если процесс привязан к терминалу, то здесь будет выведен его номер;
  • TIME - общее время выполнения процесса (user + system);
  • CMD - команда, которой был запущен процесс, если программа не может прочитать аргументы процесса, он будет выведен в квадратных скобках;

Чтобы посмотреть список процессов в виде дерева, и понимать какой процесс имеет какие дочерние процессы, выполните команду:


Для просмотра списка процессов с потоками используйте опцию -L:


Здесь появятся ещё две дополнительных колонки:

  • LWP - Это сокращение от LightWeight Proccess. Идентификатор потока;
  • NLWP - количество потоков у этого процесса.

Чтобы посмотреть список процессов определенного пользователя, например, sergiy используйте опцию -u:


Теперь давайте перейдём к другим, более интересным, интерактивным утилитам.

2. Утилита top

Утилита top не поставляется вместе с системой, поэтому вам придется её установить. Для этого в Ubuntu выполните:

sudo apt install top

Программа позволяет интерактивно просматривать список запущенных процессов Linux. Чтобы вывести список процессов Linux выполните команду:


Колонки, которые выводит программа очень похожи на ps:

  • PID - идентификатор процесса;
  • USER - имя пользователя, от имени которого выполняется процесс;
  • PR - приоритет планировщика, установленный для процесса;
  • NI - рекомендуемый приоритет процесса. Это значение можно менять, может не совпадать с реальным приоритетом планировщика;
  • VIRT - всё, что находится в памяти, используется или зарезервировано для использования;
  • RES - всё, что находится в оперативной памяти и относится к процессу. Расшифровывается как Resident Memory Size, указывается в килобайтах;
  • SHR - часть памяти из RES, которую занимают ресурсы, доступные для использования другим процессам. Расшифровывается - Shared Memory Size.
  • S - состояние процесса: D - ожидает завершения операции, R - запущен, S - спит, T - остановлен, t - остановлен отладчиком, Z - зомби;
  • %CPU - процент использования ресурсов процессора;
  • %MEM - процент использования ресурсов оперативной памяти на основе колонки RES;
  • TIME - обще процессорное время, которое процесс использовал с момента запуска;
  • COMAND - команда, с помощью которой был запущен процесс.

Для того чтобы сделать вывод программы цветным, нажмите Z:


Чтобы вывести дерево процессов Linux нажмите сочетание клавиш Shift+V:


Для отображения потоков нажмите Shift + H:


Если вам недостаточно стандартных полей с информацией о процессах, вы можете нажать Shift + F и выбрать дополнительные поля, которые надо отображать. Для выбора или удаления поля используйте пробел:


3. Утилита htop

Это ещё более мощная утилита для просмотра запущенных процессов в Linux. Пользоваться ею намного удобнее. Здесь поддерживаются не только горячие клавиши, но и управление мышью. А ещё она выводит всё в цвете, поэтому смотреть на данные намного приятнее. Для установки программы выполните:

sudo apt install htop

Для того чтобы запустить выполните в терминале:

Колонки, которые вы увидите в выводе программы, аналогичны тем, что доступны в top, поэтому я не буду рассматривать их здесь отдельно. Для настройки выводимых данных нажмите кнопку F2, затем перейдите в раздел Display Options:


Здесь надо отметить Tree view для вывода списка процессов в виде дерева, а также снять отметки с пунктов Hide threads. для отображения потоков. Здесь есть как потоки пространства пользователя userland process threads, так и потоки пространства ядра - kernel threads. Теперь всё это будет отображаться:

Для того чтобы настроить какие колонки будут отображаться используйте пункт меню Columns:

Тут вы можете выбрать какие колонки отображать, а какие нет, а также можете настроить их порядок.

4. Программа Gnome Monitor

Вы можете смотреть запущенные процессы не только в терминале, но и в графическом интерфейсе. Для этого можно использовать утилиту Gnome Monitor. У неё намного меньше возможностей, по сравнению даже с ps, но зато у неё есть графический интерфейс. Вы можете запустить программу из главного меню системы:

По умолчанию утилита отображает только процессы текущего пользователя. Если вы хотите получить все процессы кликните по иконке бутерброда и выберите Все процессы:

Теперь программа отображает все запущенные процессы Linux в системе. Здесь вы можете выполнять поиск по процессам, завершать их и многое другое. Но потоков и дерева процессов программа не показывает.

5. Утилита atop

Эта программа тоже позволяет посмотреть процессы в Linux , но немного в другом ключе. Утилиту больше интересует сколько тот или иной процесс потребляет ресурсов системы. Утилита даже может показывать потребление процессами пропускной способности диска и сети, но для этого ей необходим специальный патч ядра. Для установки программы в Ubuntu выполните:

sudo apt install atop

Затем запустите её:

Вот основные колонки, которые выводит утилита и их значения:

  • PID - идентификатор процесса;
  • CID - идентификатор контейнера, используется для контейнеров Docker;
  • SYSCPU - время, потраченное процессом на выполнение в пространстве ядра;
  • USRCPU - время, потраченное процессом на выполнение в пространстве пользователя;
  • VGROW - увеличение использования памяти колонки VIRT за последний период;
  • RGROW - увеличение использования памяти колонки RSS за последний период;
  • ST - статус процесса, N - новый, E - завершенный, S и С - процесс завершен принудительно с помощью сигнала;
  • EXC - код выхода или код сигнала, которым был завершен процесс;
  • THR - общее количество потоков в этом процессе;
  • S - состояние процесса, аналогично описанному для top;
  • CPUNR - номер ядра процессора, на котором запущен основной поток процесса;
  • CPU - процент использования ресурсов процессора;
  • CMD - команда, которой была запущена программа;
  • MEM - процент использования памяти;

Для того чтобы включить отображение потоков процесса нажмите y:


Для просмотра информации о памяти нажмите m, если хотите вернутся обратно, нажмите g:


Выводы

В этой статье мы разобрали самые основные способы посмотреть список процессов в Linux, как видите есть простые способы, но есть и более сложные и информативные. Какими способами вы пользуетесь чаще всего? Напишите в комментариях!

Список процессов

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

Чтобы посмотреть список всех процессов с дополнительной информацией, вводим:

Мы увидим, примерно, следующее:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 661 0.0 0.0 4072 8 tty1 Ss+ Jul03 0:00 /sbin/mingetty
root 662 0.0 0.0 4072 8 tty2 Ss+ Jul03 0:00 /sbin/mingetty
root 16355 0.0 0.0 171636 3308 pts/0 S 15:46 0:00 sudo su
root 16366 0.0 0.0 140896 1556 pts/0 S 15:46 0:00 su
root 16368 0.0 0.0 108316 1944 pts/0 S 15:46 0:00 bash
root 18830 0.0 0.0 110244 1172 pts/0 R+ 16:20 0:00 ps u

  • USER — учетная запись пользователя, от которой запущен процесс.
  • PID — идентификатор процесса.
  • %CPU — потребление процессорного времени в процентном эквиваленте.
  • %MEM — использование памяти в процентах.
  • VSZ — Virtual Set Size. Виртуальный размер процесса (в килобайтах).
  • RSS — Resident Set Size. Размер резидентного набора (количество 1K-страниц в памяти).
  • TTY — терминал, из под которого был запущен процесс.
  • STAT — текущее состояние процесса. Могут принимать значения:
    1. R — выполнимый процесс;
    2. S — спящий;
    3. D — в состоянии подкачки на диске;
    4. T — остановлен;
    5. Z — зомби.
    6. W — не имеет резидентных страниц;
    7. < — высоко-приоритетный;
    8. N — низко-приоритетный;
    9. L — имеет страницы, заблокированные в памяти.
  • START — дата запуска процесса.
  • TIME — время запуска процесса.
  • COMMAND — команда, запустившая процесс.

Ключи

Ключ Описание
-A Все процессы.
-a Запущенные в текущем терминале, кроме главных системных.
-d Все, кроме главных системных процессов сеанса.
-e Все процессы.
f Показать дерево процессов с родителями.
T Все на конкретном терминале.
a Все, связанные с текущим терминалом и терминалами других пользователей.
r Список только работающих процессов.
x Отсоединённые от терминала.
u Показать пользователей, запустивших процесс.

Примеры

Поиск процесса с помощью grep:

ps aux | grep apache

Убить процесс

Останавливаем процесс по его PID:

Если процесс не завершается, убиваем его принудительно:

Остановить все процессы с именем nginx:

Как и в случае с kill, можно это сделать принудительно:

killall -9 nginx

Ищем процесс по имени, извлекаем его PID и завершаем его:

* обратите внимание, что запрос может вывести несколько процессов, которые будут попадать под критерии поиска — в таком случае, они будут завершены все.

Подробная информация о процессе

Для каждого процесса создается каталог по пути /proc/<PID>, в котором создаются папки и файлы с описанием процесса.

Примеры использования /proc/<PID>

Подробный вывод статуса:

Адрес в ячейках оперативной памяти, которые занял процесс:

Команда, которой был запущен процесс:

Символьная ссылка на рабочий каталог процесса:

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

Увидеть ссылки на дескрипторы открытых файлов, которые затрагивает процесс:

Потребление ресурсов процессами

Для просмотра статистики потребления ресурсов используем утилиту top:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21059 root 20 0 157884 2280 1496 R 18,8 0,1 0:00.03 top
1 root 20 0 190996 2964 1652 S 0,0 0,1 6:49.99 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:01.78 kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:24.75 ksoftirqd/0
5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H

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

Есть несколько команд , которые вы можете использовать , чтобы найти информацию о запущенных процессах, с ps , pstree и top являются наиболее часто используемыми из них.

Как использовать ps команду

Общий синтаксис ps команды выглядит следующим образом:

По историческим причинам и из соображений совместимости ps команда принимает несколько различных типов параметров:

  • Опции стиля UNIX, перед которыми стоит одна черточка.
  • Варианты стиля BSD, используемые без тире.
  • Длинные опции GNU, начинающиеся с двух тире.

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

Опции BSD и UNIX могут быть сгруппированы.

В простейшем виде, при использовании без какой-либо опции, ps напечатает четыре столбца информации для минимум двух процессов, запущенных в текущей оболочке, самой оболочки и процессов, которые запускаются в оболочке при вызове команды.


Вывод включает в себя информацию о shell ( bash ) и процессе, запущенном в этой оболочке ( ps введенная вами команда):


Четыре колонки помечены PID , TTY , TIME , и CMD .

  • PID - Идентификатор процесса. Обычно при запуске ps команды наиболее важной информацией, которую ищет пользователь, является идентификатор процесса. Знание PID позволяет убить сбойный процесс .
  • TTY - Название управляющего терминала для процесса.
  • TIME - Совокупное время ЦП процесса, показанное в минутах и ​​секундах.
  • CMD - Имя команды, которая использовалась для запуска процесса.

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

Команда ps принимает огромное количество опций, которые можно использовать для отображения определенной группы процессов и различной информации о процессе, но для повседневного использования требуется лишь несколько из них.

ps чаще всего используется со следующей комбинацией параметров:

Форма BSD :

  • a - Опция указывает ps отображать процессы всех пользователей. Только процессы, не связанные с терминалом, и процессы руководителей групп не отображаются.
  • u - обозначает пользовательский формат, который предоставляет подробную информацию о процессах.
  • x - Инструктирует ps перечислить процессы без управляющего терминала. В основном это процессы, которые запускаются во время загрузки и работают в фоновом режиме .

Команда отображает информацию в одиннадцати столбцах USER , PID , %CPU , %MEM , VSZ , RSS , STAT , START , TTY , TIME , и CMD .


Мы уже объяснили PID , TTY , TIME и CMD . Вот объяснение других меток:

  • USER - Пользователь, который запускает процесс.
  • %CPU - The CPU использование процесса.
  • %MEM - Процент резидентного установленного размера процесса к физической памяти на машине.
  • VSZ - Размер виртуальной памяти процесса в КиБ.
  • RSS - Размер физической памяти , используемой процессом.
  • STAT - Код состояния процесса, такой как Z (зомби), S (спящий) и R (работает).
  • START - время, когда команда началась.

f Опция указывает , ps чтобы отобразить в виде дерева родителя к ребенку процессов:


Команда ps также позволяет вам сортировать вывод. Например, чтобы отсортировать вывод на основе использования памяти, вы должны использовать:

UNIX форма :

  • -e Параметр предписывает , ps чтобы отобразить все процессы.
  • На -f стендах полноформатный листинг, в котором представлена ​​подробная информация о процессах.


Команда отображает информацию в восьми столбцах UID , PID , PPID , C , STIME , TIME , и CMD .


Метки, которые еще не объяснены, имеют следующее значение:

  • UID - То же USER , что и пользователь, который запускает процесс.
  • PPID - Идентификатор родительского процесса.
  • C - То же %CPU , что и загрузка ЦП процесса.
  • STIME - То же START , что и время начала команды.

Чтобы просмотреть только процессы, запущенные от имени определенного пользователя, введите следующую команду, где linuxize указано имя пользователя:

Пользовательский формат

o - Опция позволяет указать , какие столбцы отображаются при выполнении ps команды.

Например, чтобы напечатать информацию только о PID и COMMAND , вы должны выполнить одну из следующих команд:

Использование ps с другими командами

ps может использоваться в сочетании с другими командами через трубопровод.

Если вы хотите отобразить вывод ps команды, по одной странице за раз передайте ее less команде:


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

Вывод

Команда ps является одной из наиболее часто используемых команд при устранении неполадок в системах Linux. Она имеет много вариантов, но , как правило, большинство пользователей используют либо ps aux или ps -ef для сбора информации о запущенных процессах.

Для получения дополнительной информации ps , введите man ps свой терминал.

Во время работы процесс будет открывать множество ресурсов, включая файл файла, сокет коммуникационного соединения, порт прослушивания и т. Д. Мы называем их коллективными дескрипторами. Все в Linux является файлом, поэтому, когда процесс открывает количество дескрипторов При превышении системного лимита мы получим предупреждение: слишком много открытых файлов.

Во-вторых, ограничения ресурсов Linux

1. Ограничения пользовательских ресурсов

В Bash есть команда ulimit, которая обеспечивает управление доступными ресурсами оболочки и процессами, запускаемыми оболочкой. В основном это количество открытых файловых дескрипторов, максимальное количество процессов пользователя, размер файла coredump и т. Д.

Конфигурацию ограничений ресурсов можно настроить в файле подконфигурации в /etc/security/limits.conf или /etc/security/limits.d/. Система сначала загружает limits.conf, а затем загружает каталог limits.d в алфавитном порядке. После загрузки файла конфигурации он перезапишет предыдущую конфигурацию. Формат конфигурации следующий:

soft - значение предупреждения, hard - максимальное значение, * означает соответствие всем пользователям

Просмотр ограничений пользовательских ресурсов для входа в текущую оболочку

2. ограничение ресурса обслуживания

Мы всегда упоминали оболочку выше, поэтому для тех пользователей, которые не вошли в систему через аутентификацию PAM, таких как mysql, nginx и т. Д., Вышеуказанная конфигурация не эффективна;

Поскольку в системе CentOS 7 / RHEL 7 вместо предыдущего SysV используется Systemd, область конфигурации файла /etc/security/limits.conf сокращается. Конфигурация в limits.conf применима только для аутентификации PAM. Ограничение ресурсов вошедшего в систему пользователя, оно не влияет на ограничение ресурсов службы systemd.

Его нужно настроить с помощью файлов /etc/systemd/system.conf и /etc/systemd/user.conf. Точно так же все файлы .conf в двух соответствующих каталогах /etc/systemd/system.conf.d/* .conf и /etc/systemd/user.conf.d/*.conf.

Среди них system.conf используется экземплярами системы, а user.conf - экземплярами пользователей. Для общих служб используйте конфигурацию в system.conf. Конфигурация в system.conf.d / *. Conf переопределит system.conf.

Формат конфигурации следующий:

= Тип ресурса слева, размер справа

Просмотр лимита ресурсов службы

Например, проверьте влияние конфигурации службы nginx:

3. Лимит системных ресурсов

Для пользователя и службы ранее были выделены ресурсы, но каково общее количество ресурсов в системе? Сюда входят параметры ядра. Существует много параметров ядра. Нам нужно только знать, как изменить наиболее часто используемые, такие как количество процессов и количество дескрипторов.

Три, количество процессов ограничено

1. Ограничьте количество пользовательских процессов.

По умолчанию в /etc/security/limits.d/ есть файл подконфигурации 20-nproc.conf, который используется для установки максимального количества процессов для каждого пользователя.

Проверка /etc/security/limits.d/20-nproc.conf обнаружит, что пользователь root по умолчанию не ограничен, а максимальное количество обычных пользовательских процессов составляет 4096

Установите максимальное количество процессов на пользователя

Примечание. Изменение файла конфигурации не повлияет на ограничение процесса для текущего пользователя, вошедшего в систему.

2. Лимит процесса обслуживания

Примечание: изменение файла конфигурации не изменит ограничение на количество процессов запущенной в данный момент службы, и ее необходимо перезапустить.

3. Общее количество процессов в системе.

Выше мы установили максимальное количество процессов, которые может открыть каждый пользователь, но это не контролирует общее количество процессов в системе (kernel.pid_max). Предполагая, что kernel.pid_max = 1000, максимальное количество пользовательских процессов пользователя, независимо от того, насколько велико заданное значение, Максимальное количество процессов, которые можно открыть, по-прежнему составляет 1000

Просмотрите глобальный метод pid_max:

Временно измените этот метод значения:

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

Вышеуказанное действует только временно, оно будет недействительным после перезапуска машины, постоянный эффективный метод:

Добавьте kernel.pid_max = 65535 в /etc/sysctl.conf

Затем перезапустите машину.

В-четвертых, ограничение количества ручек

1. Ограничьте количество пользовательских дескрипторов

Лимит пользователя для входа, как упоминалось выше, можно настроить с помощью файла подконфигурации в /etc/security/limits.conf или /etc/security/limits.d/ следующим образом:

Примечание: изменение файла конфигурации не повлияет на ограничение дескриптора текущего пользователя, вошедшего в систему.

2. Предел обработки обслуживания

Примечание. Изменение файла конфигурации не приведет к изменению ограничения дескриптора запущенной в данный момент службы.

3. Общее количество системных дескрипторов.

Количество процессов, которые могут быть открыты каждым пользователем, и количество дескрипторов, которые могут быть открыты каждым процессом, указаны выше; есть также файл, который устанавливает общее количество дескрипторов, которые могут быть открыты всеми процессами в системе, то есть этот параметр является системным.

Измените максимальное количество системных дескрипторов, метод следующий (действителен после настройки):

Просмотрите общее количество дескрипторов, используемых в настоящее время в системе:

Читайте также: