Как посмотреть запущенные процессы в linux
Перейти к содержимому

Как посмотреть запущенные процессы в linux

  • автор:

Как использовать команду ps для мониторинга процессов Linux

ps (processes status — статус процессов) — это встроенная утилита Unix/Linux для просмотра информации, касающейся выбора запущенных процессов в системе: она считывает эту информацию из виртуальных файлов в файловой системе /proc. Это одна из важных утилит для системного администрирования, особенно в рамках мониторинга процессов, чтобы помочь вам понять, что происходит в системе Linux.

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

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

Управление процессами в Linux

Сердцем всех Linux и Unix-подобных операционных систем является ядро. Среди его многочисленных обязанностей — распределение системных ресурсов, таких как оперативная память и процессорное время. Они должны выполняться в режиме реального времени, чтобы все запущенные процессы получали свою справедливую долю в соответствии с приоритетом каждой задачи.

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

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

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

Программа для показа процессов в Linux

Самый простой способ использовать ps — запустить её без параметров:

ps

ps покажет список процессов в данном терминале.

В выводе присутствует четыре столбца:

  • PID: идентификационный номер процесса.
  • TTY: имя консоли, на которой пользователь выполнил вход.
  • TIME: количество времени центрального процессора, которое потребил процесс.
  • CMD: имя команды, которая запустила процесс

Как увидеть все процессы в Linux

Добавление опции -e (выбрать все процессы) сделает так, что ps перечислит процессы, которые были запущены всеми пользователями, а не только пользователем, который запускает команду ps. Поскольку это будет длинный список, то вы можете добавить команду less.

Список процессов с возможностью прокрутки в команде less:

Теперь записей о процессах намного больше, но мы видим те же четыре столбца, что и раньше. Вопросительный знак (?) в столбце TTY означает, что процесс запускался не из окна терминала.

Отображение иерархии процессов (дерево процессов в Linux)

Если вы видите, какие процессы запустили другие процессы, то иногда это может помочь выяснить проблему или определить конкретный процесс. Для этого мы используем опцию -H.

Отступы указывают, какие процессы являются родителями каких других процессов.

Чтобы добавить немного ясности, мы можем попросить ps добавить несколько линий ASCII и нарисовать иерархию в виде дерева. Это можно сделать опцией —forest.

Это позволить проще отслеживать, какие процессы являются родителями других процессов.

Как напечатать дерево определённого процесса

Вы можете получить дерево процессов только нужной вам программы следующим образом (замените sshd на интересующий вас процесс):

Об опции -C будет рассказано далее в этой статье.

Фильтрация вывода ps по определённым строкам (по имени команды, например)

Вы можете направить вывод из ps через grep и найти нужные записи о процессах по любым строкам. Здесь мы ищем записи, соответствующие поисковому запросу «firefox»:

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

Больше столбцов в выводе ps

Чтобы добавить дополнительные столбцы к выводу, используйте параметр -f (полный формат).

Дополнительный набор столбцов включён в вывод ps.

Добавлены следующие новые столбцы:

  • UID: идентификатор пользователя владельца этого процесса.
  • PPID: идентификатор родительского процесса.
  • C: Количество детей, которые есть у процесса.
  • STIME: Время начала. Время, когда процесс был запущен.

Используя опцию -F (дополнительный полный формат), мы можем получить ещё больше столбцов:

Если у вас маленькое окно терминала, то столбцы, которые мы получаем в этот раз, требуют прокрутки экрана в сторону, чтобы показать их все. Нажатие клавиши «Стрелка вправо» смещает дисплей влево.

Теперь добавились следующие столбцы:

  • SZ: размер страниц ОЗУ образа процесса.
  • RSS: резидентный размер набора. Это не подкачанная физическая память, используемая процессом.
  • PSR: процессор, которому назначен процесс.

Нужно ли указывать дефис перед опциями ps

В некоторых примерах вы можете увидеть использование ps с опциями без дефиса или с длинными вариантами написания опций в стиле GNU. Для совместимости, ps поддерживает все три формата. Опции без дефиса — это стиль BSD и значение опций с дефисом и без может быть различным!

Пример показа процессов в формате BSD:

В этой команде значение опций следующее:

  • u — ориентированный на пользователя формат
  • a — убирает ограничение «только свои процессы»
  • x — убирает ограничение «только процессы с терминалом»

Проще говоря, если использовать вместе a и x, то будут показаны все процессы.

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

Поиск процессов по идентификатору процесса

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

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

Поиск процессов по имени команды

Опция -C КОМАНДА позволяет вам искать процесс, используя имя команды. То есть имя команды, которая запустила процесс. Это несколько отличается от строки команды, которая может включать имена путей и параметры или опции.

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

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

Как увидеть потоки процесса

Чтобы вывести все потоки процесса, используйте флаг -H. Опция -L приведёт к показу столбца LWP (light weight process — процесс с малым весом), а также столбца NLWP (number of light weight process — число процессов с малым весом).

Как увидеть процессы определённого пользователя

Чтобы увидеть процессы, принадлежащие конкретному пользователю, используйте опцию -u СПИСОК ПОЛЬЗОВАТЕЛЕЙ:

Отображаются процессы, принадлежащие учётной записи пользователя mial.

Как вывести все процессы запущенные пользователем root

Это частный случай показа процессов определённого пользователя.

Команда ниже позволяет вам просматривать каждый процесс, работающий с привилегиями пользователя root (действительный и эффективный идентификатор) в формате пользователя.

Просмотр групповых процессов

Если вы хотите перечислить все процессы, принадлежащие определённой группе (реальный идентификатор группы (RGID) или имя), введите:

Чтобы вывести список всех процессов, принадлежащих эффективному имени группы (или сеанса), введите.

Листинг процессов по терминалам

Чтобы увидеть процессы, связанные с TTY, используйте опцию -t УКАЖИТЕ TTY. При использовании без номера TTY опция -t сообщает о процессах, связанных с текущим окном терминала.

Все перечисленные процессы связаны с pts/1.

Выбор столбцов для отображения

С опцией -o ФОРМАТ вы можете выбрать, какие столбцы вы хотите включить в вывод ps. Столбцы нужно указывать по имени. В руководстве по ps:

вы найдёте длинный список имён столбцов в разделе STANDARD FORMAT SPECIFIERS.

В следующем примере мы выводим потребление процессом времени центрального процессора (pcpu), потребление процессором памяти (pmem) и запустившая его команда вместе с опциями (args):

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

Сортировка вывода по столбцам

Вы можете отсортировать вывод, используя опцию —sort. Давайте отсортируем вывод по столбцу CPU:

Дефис «» означает сортировку от большего к меньшему.

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

Мы получаем отсортированный, усечённый список.

Если мы добавим больше столбцов для вывода, мы сможем отсортировать по большему количеству столбцов.

Без дефиса или со знаком «+» сортировка выполняется от меньшего к большему.

Добавим в сортировку столбец pmem:

Сортировка по-прежнему выполняется по значению pcpu, но если для каких-то записей эти значения одинаковые, то выполняется сортировка по pmem для этих значений.

Давайте сделаем вывод результатов немного более полезным и добавим столбец идентификатора процесса (pid), чтобы мы могли видеть номер процесса каждого процесса в нашем листинге.

Теперь мы можем идентифицировать процессы.

Все возможные поля ps

Чтобы увидеть все возможные для вывода поля ps выполните такую команду:

Эти поля вы можете применять с опцией -o.

Примеры настраиваемого вывода ps

Команда ниже позволяет вам увидеть PID, PPID, имя пользователя и команду процесса.

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

Как найти имя процесса по PID

Чтобы найти имя процесса, используя его PID.

Показать родительский и дочерний процессы

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

Чтобы найти все PID всех экземпляров процесса, что полезно при написании сценариев, которые должны считывать PID из выходных данных (из стандартного входа).

Как выключить процесс по идентификатору процесса

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

Так или иначе, мы можем определить процессы, которые работают. Зная их идентификатор процесса, мы можем (если нужно) остановить любой из этих процессов с помощью команды kill. Если бы мы хотели убить процесс 898, мы бы использовали этот формат:

Помните о том, что в некоторых случаях процесс не завершается и при этом не выводится никаких ошибок или предупреждений. На самом деле, данная команда является «рекомендательной», она «просит» процесс завершиться. Подробности смотрите в статье «Почему команда kill не убивает процесс?».

Как выключить процесс зная его имя

Команда pkill позволяет вам убивать процессы по имени. Убедитесь, что вы определили правильный процесс! Эта команда завершит процесс top.

Как остановить несколько процессов по имени

Если у вас запущено несколько копий процесса, или процесс породил несколько дочерних процессов (как это может сделать Google Chrome), как вы можете выключить их? Это так же просто. Мы используем команду killall.

У нас запущено два экземпляра top:

Мы можем завершить их обоих с помощью этой команды:

Отсутствие ответа означает отсутствие проблем, т. е. оба эти процессы были остановлены.

Прежде чем убить процесс

Убедитесь, что это тот, который вам нужен, и убедитесь, что это не вызовет никаких проблем. В частности, стоит проверить с помощью параметров -H и —forest, чтобы убедиться, что в нем нет важных дочерних процессов, о которых вы забыли.

Устранение неполадок производительности системы Linux

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

Чтобы найти все процессы, потребляющие больше всего памяти и ЦПУ в Linux:

Вывод информации о безопасности

Показать контекст безопасности (специально для SELinux) можно следующим образом:

С помощью этой команды вы также можете отобразить информацию о безопасности в определённом пользователем формате:

Выполните мониторинг процессов в режиме реального времени с помощью утилиты watch

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

30 полезных команд ps для мониторинга процессов Linux

Команды LINUX «от A до Z» — настольная книга с примерами

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

Содержание:

Что такое ps в Linux

Утилита ps (от англ. Process State — «состояние процессов») — это встроенная программа для Unix-подобных операционных систем. Прежде всего, она широко используется при администрировании ОС семейства GNU / Linux. С ее помощью осуществляется мониторинг активных процессов по виртуальным файлам в файловой системе /proc .

Примеры использования команд ps

Утилита ps является одним из основных инструментов системного администратора, поскольку позволяет ориентироваться в том, что конкретно происходит с Linux. Потому мы решили специально написать статью с 30 полезными способами использования ps для мониторинга активных запущенных процессов в операционной системе семейства GNU / Linux.

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

Самый простой пример использования утилиты — это выведение на экран всех активных процессов оболочки Linux. Для этого достаточно ввести в командную строку команду ps без каких-либо аргументов и опций:

ps

А теперь — перейдем к различным полезным примерам использования команды ps .

Курсы Python с нуля до DevOps на практике за 1,5 часа

Используем общий формат для Unix / Linux

Первый пример — изменение стандартного формата вывода данных о запущенных процессах. Для начала попробуем вывести информацию в формате, общем для операционных систем Unix / Linux. Для этого вводим в командную строку команду ps с опцией -A :

К аналогичному результату приведет и введение команды ps с опцией -e :

ps

Используем формат вывода от BSD

Стоит отметить, что некоторым системным администраторам более удобно выводить результаты в формате, характерном для BSD. Для этого вводим в командную строку команду ps с опциями -au :

Также для получения соответствующего формата вывода можно ввести в командную строку команду ps с опциями -axu :

ps

Используем расширенный вывод команды ps с помощью полноформатного листинга

Иногда системному администратору нужна более подробная информация о запущенных процессах. В таком случае вводим в командную строку команду ps с опциями -ef :

Курсы Git за час: руководство для начинающих DevOps / DevNet инженеров

Если и этого мало — вводим в командную строку команду ps с опциями -eF для получения более подробного листинга:

ps

Показываем все активные процессы пользователя с помощью команды ps

Еще один из полезных примеров использования утилиты — это выведение всех активных процессов конкретного пользователя. Чтобы получить такой результат — вводим в командную строку команду ps с опцией -x :

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

С помощью утилиты можно вывести на экран список активных процессов, запущенных пользователем с заданным именем. Для этого вводим в командную строку команду ps с опцией -U и добавляем к ней в качестве аргумента имя пользователя:

Показываем активные процессы по RUID пользователя

Вместо имени пользователя Вы можете использовать его RUID.

RUID (от англ. Real User ID) — это реальный идентификатор пользователя, инициировавшего запуск процесса в операционных системах семейства GNU / Linux и других UNIX-подобных ОС.

Для получения всех процессов, инициированных пользователем — вводим в командную строку команду ps с опцией -U и добавляем к ней в качестве аргумента идентификатор пользователя:

ps

Выводим на экран активные процессы, запущенные с правами пользователя по его имени

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

Выводим на экран активные процессы, запущенные с правами пользователя по EUID

Вместо имени пользователя Вы можете использовать его EUID.

EUID (от англ. Effective User ID) — это эффективный идентификатор пользователя в UNIX-подобных операционных системах, с правами которого которого выполняется процесс. Как правило он равен реальному идентификатору пользователя. Однако может отличаться, если процесс выполняется с разрешениями, отсутствующими у пользователя (типичный пример — выполнение команд от имени суперпользователя с помощью команды sudo ).

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

Находим все процессы, запущенные суперпользователем либо выполняющиеся с правами root (по RUID и EUID)

Системному администратору обязательно нужно уметь выводить на экран все процессы, которые запущены от имени суперпользователя (по RUID). Либо же выполняются с root-правами (по EUID). Для этого вводим в командную строку команду ps одновременно с опциями -U и -u , указав оба раза в качестве аргументов — root :

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

ps

Показываем все активные процессы группы пользователей

Бывает полезно вывести на экран все процессы, которые запущены определенной группой пользователей. При этом сделать этом можно как по названию группы, так и по значению ее RGID.

RGID (от англ. Real Group ID) — это реальный идентификатор группы, от имени пользователей которой запущен процесс.

Для попробуем использовать название группы — вводим его в командную строку после команды ps с опцией -G :

Вместо названия группы Вы можете ввести в качестве аргумента значение ее RGID:

ps

Находим и выводим на экран все активные процессы по EGID

Помимо всего прочего, Вы можете вывести на экран все процессы, которые выполняются с правами пользователей указанной группы — отсеяв их по значению EGID.

EGID (от англ. Effective Group ID) — эффективный идентификатор группы пользователей в Linux.

Чтобы получить список всех процессов, выполняющихся с правами интересующей Вас группы пользователей — вводим в командную строку команду ps с опцией -G и названием группы в качестве аргумента:

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

Находим активные процессы по их PID с помощью команды ps

Также разработчики предусмотрели выведение запущенных процессов по PID.

PID (от англ. Process ID) — идентификатор процесса в операционной системе (в том числе — в Linux и других UNIX-подобных ОС).

Чтобы найти процесс по значению его идентификатора — вводим в командную строку команду ps с опцией -p и значение PID процесса в качестве аргумента:

ps

Выводим на экран активные процессы по значению их PPID

Не менее полезно для системного администратора уметь вывести список процессов по значению PPID.

PPID (от англ. Parent Process ID) — это идентификатор родительского процесса. То есть процесса, инициировавшего запуск данного процесса.

Чтобы найти процессы по значению ID их родительского процесса — введите в командную строку команду ps с опцией —ppid и в качестве аргумента укажите идентификатор предполагаемого родительского процесса:

ps

Находим несколько активных процессов по их значениям PID с помощью команды ps

Стоит отметить, что разработчики утилиты предусмотрели возможность вывода сразу нескольких конкретных активных процессов по значениям их PID. Для этого их идентификаторы достаточно перечислить через запятую в качестве аргумента команды ps с опцией -p :

ps

Настраиваем отображение процессов по TTY

Также предусмотрена возможность выведения списка запущенных процессов по их TTY.

TTY (от англ. Teletypewriter) — это имя терминала, через который запускается тот или иной процесс в UNIX-подобных ОС, включая Linux.

Вводим в командную строку команду ps с опцией -t и значение TTY в качестве аргумента:

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

ps

Настраиваем отображение дерева процессов с помощью команды ps

С помощью утилиты можно отобразить дерево процессов в Linux.

Дерево процессов — это схема взаимосвязи между процессами, которая показывает для каждого запущенного процесса родительский процесс в системе (если родительские процессы не являются активными, то вместо них указывается init либо systemd ).

В случае, если Вам нужно увидеть дерево процессов — вводим в командную строку команду ps с опцией —forest :

ps

Показываем дерево процессов для конкретного процесса

Безусловно, выведение дерева процессов было бы не таким полезным, если бы нельзя было вывести его для конкретного процесса. Для этого вводим в командную строку команду ps с опцией —forest и название процесса в качестве аргумента:

Другой способ — вывести полное дерево процессов и отфильтровать вывод команды ps с помощью команды grep :

ps

Выводим на экран данные о потоках процесса с помощью команды ps

Также у Вас может возникнуть необходимость отобразить данные о потоках процесса (LWP и NLWP).

LWP (от англ. Light-Weight Process) — это легковесный процесс, средство достижения многозадачности в операционной системе. Процесс, работающий в пространстве пользователя поверх одного из потоков выполнения ядер процессора.

NLWP (от англ. Number Light-Weight Process) — число легковесных процессов в операционной системе.

Для отображения значений LWP и NLWP процесса — вводим в командную строку команду ps с опцией -L и название исполняемого файла после опции -C :

ps

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

Теперь, когда Вы научились получать важную информацию о процессах — можно попробовать установить пользовательский формат вывода. Чтобы отобразить все существующие виды столбцов и выбрать из них интересующие — вводим в командную строку команду ps с опцией -l (длинный формат вывода команды):

Выводим на экран PID, PPID, имя пользователя и команду процесса

Давайте попробуем вывести одновременно значения PID и PPID, имя пользователя, а также — исполняемый файл запущенного процесса. Для этого вводим в командную строку команду ps с опциями -eo и перечисляем через запятую без пробелов в качестве аргумента названия столбцов ( pid,ppid,user,cmd ):

ps

Выводим на экран группу файловой системы, приоритет nice, время старта и выполнения процессов

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

  • идентификатор группы доступа к файловой системе;
  • приоритет nice;
  • время старта процесса;
  • время выполнения процесса.

Допустим, что все эти данные Вы хотите узнать для конкретного процесса — тогда сначала вводим командную строку команду ps с опцией -p и значением PID процесса. И через пробел добавляем опцию -o , после которой через запятую без пробелов перечисляем названия столбцов ( pid,ppid,fgroup,ni,lstart,etime ):

ps

Выводим имя процесса по PID с помощью команды ps

Наверное, довольно часто возникает потребность узнать имя процесса, когда известен лишь его PID. В этом случае вводим в командную строку команду ps с опцией -p и значением PID процесса. И добавляем аргумент comm= после опции -o :

ps

Находим родительские и дочерние процессы

Крайне полезным бывает найти родительские и дочерние процессы. Для этого вводим в командную строку команду ps с опцией -C и название процесса:

ps

Узнаем значения PID разных экземпляров процесса

Бывает, что нужно вывести PID всех запущенных экземпляров процесса. Как правило, такие данные требуются для скриптов, берущих информацию PID из файла или стандартного вывода (поток 1 — stdout). Сделать это можно следующим образом:

ps

Выводим на экран время выполнения процесса с помощью команды ps

Кроме того, бывает полезным узнать, как долго выполняется тот или иной процесс. Для этого вводим в командную строку команду ps с опциями -eo и перечисляем через запятую без пробелов названия столбцов ( comm,etime,user ). С помощью конвейера добавляем фильтрацию ввода командой grep , выводя только строки, содержащие название процесса:

Важно: время работы процесса sshd указано в минутах и секундах.

ps

Находим процессы, использующие максимум ресурсов компьютера (ОЗУ / ЦП)

Также полезным для любого системного администратора бывает умение обнаружить все процессы, использующие максимальное количество рерсурсов ОЗУ / ЦП в Linux.

Получить информацию по использованию ОЗУ поможет следующий набор опций и аргументов:

Так будет выглядеть ввод, если Вас интересует использование процессора:

ps

Завершаем неуправляемые процессы с помощью команды ps

Вероятно, Вам придется завершать работу процессов в Linux (например, процессы, которые потребляют чрезмерные объемы памяти и слишком сильно загружают процессор). Для этого сначала узнаем PID процесса — вводим в командную строку команду ps с опцией -A (вывод всех активных процессов) и с помощью команды grep с опцией -i (игнорирование регистра при поиске соответствия) через конвейер фильтруем вывод по предполагаемому названию процесса:

После этого вводим в командную строку команду kill с -9 в качестве первого аргумента. И далее через пробелы — значения PID процессов, которые Вы желаете завершить:

Важно: команда kill здесь использована для примера, корректное завершение процессов — это тема для других наших статей.

Просматриваем контекст безопасности с помощью команды ps

С помощью утилиты также можно вывести на экран контекст безопасности процессов.

Контекст безопасности — это одно из понятий системы SELinux (от англ. Security-Enhanced LinuxLinux с улучшенной безопасностью), включающее в себя совокупность атрибутов, связанных с объектами и субъектами (файлами, сетевыми портами, оборудованием и т.п.).

Чтобы вывести на экран контекст безопасности процессов — вводим в командную строку команду ps с опцией -M :

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

ps

Указываем пользовательский формат данных о безопасности

Информацию о контексте безопасности и прочие полезные данные также можно комбинировать, получая вывод в пользовательском формате. Для этого вводим в командную строку команду ps с опциями -eo и далее перечисляем аргументы через запятую без пробелов ( euser,ruser,suser,fuser,f,comm,label ):

Осуществляем мониторинг в реальном времени с помощью утилиты watch

Стоит отметить, что команда ps имеет один серьезный недостаток — она отображает информации, актуальную только на момент введения. Однако решить эту проблему можно за счет использования watch.

Утилита watch — это инструмент для UNIX-подобных операционных систем, предназначенный для циклического запуска других программ с заданным временным интервалом.

Объединив команды watch и ps , можно осуществлять мониторинг процессов в реальном времени с интервалом в 1 секунду:

ps

Важно: для просмотра часто обновляемого вывода можно применять htop, top и glances (последние два — инструменты мониторинга производительности Linux).

Выводы

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

Спасибо за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях!

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Linux List Processes – How to Check Running Processes

Bolaji Ayodeji

Bolaji Ayodeji

Every day, developers use various applications and run commands in the terminal. These applications can include a browser, code editor, terminal, video conferencing app, or music player.

For each of these software applications that you open or commands you run, it creates a process or task.

One beautiful feature of the Linux operating system and of modern computers in general is that they provide support for multitasking. So multiple programs can run at the same time.

Have you ever wondered how you can check all the programs running on your machine? Then this article is for you, as I’ll show you how to list, manage, and kill all the running processes on your Linux machine.

Prerequisites

  • A Linux distro installed.
  • Basic knowledge of navigating around the command-line.
  • A smile on your face 🙂

A Quick Introduction to Linux Processes

A process is an instance of a running computer program that you can find in a software application or command.

For example, if you open your Visual Studio Code editor, that creates a process which will only stop (or die) once you terminate or close the Visual Studio Code application.

Likewise, when you run a command in the terminal (like curl ifconfig.me ), it creates a process that will only stop when the command finishes executing or is terminated.

How to List Running Processes in Linux using the ps Command

You can list running processes using the ps command (ps means process status). The ps command displays your currently running processes in real-time.

To test this, just open your terminal and run the ps command like so:

Screenshot-2021-06-28-at-3.25.33-PM

This will display the process for the current shell with four columns:

  • PID returns the unique process ID
  • TTY returns the terminal type you’re logged into
  • TIME returns the total amount of CPU usage
  • CMD returns the name of the command that launched the process.

You can choose to display a certain set of processes by using any combination of options (like -A -a , -C , -c , -d , -E , -e , -u , -X , -x , and others).

If you specify more than one of these options, then all processes which are matched by at least one of the given options will be displayed.

Screenshot-2021-06-28-at-3.55.10-PM

The ps command manual page.

To display all running processes for all users on your machine, including their usernames, and to show processes not attached to your terminal, you can use the command below:

Here’s a breakdown of the command:

  • ps : is the process status command.
  • a : displays information about other users’ processes as well as your own.
  • u : displays the processes belonging to the specified usernames.
  • x : includes processes that do not have a controlling terminal.

This will display the process for the current shell with eleven columns:

  • USER returns the username of the user running the process
  • PID returns the unique process ID
  • %CPU returns the percentage of CPU usage
  • %MEM returns the percentage memory usage
  • VSV returns the virtual size in Kbytes
  • RSS returns the resident set size
  • TT returns the control terminal name
  • STAT returns the symbolic process state
  • STARTED returns the time started
  • CMD returns the command that launched the process.

How to List Running Processes in Linux using the top and htop Commands

You can also use the top task manager command in Linux to see a real-time sorted list of top processes that use the most memory or CPU.

Type top in your terminal and you’ll get a result like the one you see in the screenshot below:

Screenshot-2021-06-28-at-4.27.28-PM

An alternative to top is htop which provides an interactive system-monitor to view and manage processes. It also displays a real-time sorted list of processes based on their CPU usage, and you can easily search, filter, and kill running processes.

htop is not installed on Linux by default, so you need to install it using the command below or download the binaries for your preferred Linux distro.

Just type htop in your terminal and you’ll get a result like the one you see in the screenshot below:

Screenshot-2021-06-29-at-4.49.09-AM

How to Kill Running Processes in Linux

Killing a process means that you terminate a running application or command. You can kill a process by running the kill command with the process ID or the pkill command with the process name like so:

To find the process ID of a running process, you can use the pgrep command followed by the name of the process like so:

To kill the iTerm2 process in the screenshot above, we will use any of the commands below. This will automatically terminate and close the iTerm2 process (application).

Conclusion

When you list running processes, it is usually a long and clustered list. You can pipe it through less to display the command output one page at a time in your terminal like so:

or display only a specific process that matches a particular name like so:

I hope that you now understand what Linux processes are and how to manage them using the ps , top , and htop commands.

Make sure to check out the manual for each command by running man ps , man top , or man htop respectively. The manual includes a comprehensive reference you can check if you need any more help at any point.

Использование ps, kill и nice для управления процессами в Linux

Использование ps, kill и nice для управления процессами в Linux

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

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

В этом учебном модуле мы расскажем о некоторых простых аспектах управления процессами. Linux предоставляет широкий выбор инструментов для этой цели.

В качестве примера мы используем Ubuntu 12.04 VPS, но любые современные дистрибутивы Linux будут работать аналогичным образом.

Просмотр запущенных процессов в Linux

Чтобы посмотреть, какие процессы запущены на вашем сервере, нужно запустить команду top :

В верхней части подборки приведена статистика по системе, в том числе сведения о нагрузке и общем количестве задач.

Вы можете легко увидеть, что в системе запущен 1 процесс, а 55 процессов находятся в режиме сна (т. е. не активны/не используют ресурсы ЦП).

В нижней части отображаются запущенные процессы и статистика их использования.

В репозиториях доступна улучшенная версия top , которая называется htop . Установите ее с помощью следующей команды:

Если мы запустим команду htop , мы увидим отображение информации в более удобном формате:

Использование ps для вывода перечня процессов

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

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

При вызове без аргументов вывод может быть довольно сжатым:

Вывод показывает все процессы, связанные с текущим пользователем и текущим сеансом терминала. Это имеет смысл, потому что мы запускаем на этом терминале только bash и ps .

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

Эти опции предписывают ps показать процессы, принадлежащие всем пользователям (вне зависимости от привязки терминала) в удобном формате.

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

Как видите, процесс kthreadd отображается как родитель процесса ksoftirqd/0 и других процессов.

Примечание об идентификаторах процессов

В системах Linux и Unix каждому процессу назначается идентификатор процесса или PID. Операционная система использует их для идентификации и отслеживания процессов.

Чтобы быстро узнать PID процесса, вы можете использовать команду pgrep :

Эта команда просто запросит идентификатор процесса и выведет его.

Процессу init, который создается первым при загрузке, присваивается PID “1”.

Этот процесс отвечает за создание всех остальных процессов в системе. Последующим процессам присваиваются большие номера PID.

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

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

Отношения родительских и дочерних элементов

Создание дочернего процесса осуществляется в два этапа: fork() создает новое адресное пространство и копирует в него ресурсы, принадлежащие родительскому процессу, с помощью copy-on-write; а exec() загружает исполняемый блок в адресное пространство и выполняет его.

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

Отправка сигналов процессам в Linux

Все процессы Linux реагируют на сигналы. Операционная система использует сигналы, чтобы отправить программам команду остановиться или изменить поведение.

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

Наиболее распространенный способ передачи сигналов в программу — использовать команду kill .

Как вы можете догадаться, по умолчанию эта утилита пытается уничтожить процесс:

Она отправляет процессору сигнал TERM. Сигнал TERM просит процесс остановиться. Это позволяет программе выполнить операции по очистке и нормально завершить работу.

Если программа работает неправильно и не завершает работу после получения сигнала TERM, мы можем отправить сигнал более высокого уровня — KILL :

Это специальный сигнал, который не отправляется программе.

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

Каждому сигналу присвоено число, которое можно передать вместо имени. Например, вы можете передать “-15” вместо “-TERM” и “-9” вместо “-KILL”.

Использование сигналов для других целей

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

Например, многие демоны перезапускаются при получении сигнала HUP или прекращения работы. Например, так работает Apache.

<pre>sudo kill -HUP <span >

Получив вышеуказанную команду, Apache перезагрузит файл конфигурации и возобновит вывод контента.

Вы можете вывести список сигналов, которые можно отправлять с помощью kill, используя следующую команду:

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

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

Команда pkill работает практически точно так же как и kill , но использует имя процесса:

Вышеуказанная команда эквивалентна команде:

Если вы хотите отправить сигнал каждому экземпляру определенного процесса, вы можете использовать команду killall :

Приведенная выше команда отправит сигнал TERM всем экземплярам firefox, запущенным на этом компьютере.

Настройка приоритетов процессов

Часто бывает необходимо изменить приоритет процессов в серверной среде.

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

Linux контролирует приоритеты с помощью значения вежливости.

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

Когда мы запускали команду top в начале этого учебного модуля, мы видели столбец “NI”. В этом столбце отображается значение вежливости процесса:

В зависимости от системы, значения вежливости могут различаться от “-19/-20” (наибольший приоритет) до “19/20” (наименьший приоритет).

Чтобы запустить программу с определенным значением вежливости, мы можем использовать команду nice :

Это работает только в начале новой программы.

Чтобы изменить значение вежливости уже выполняемой программы, мы используем инструмент renice :

Примечание. Хотя nice по необходимости использует имя команды, renice вызывает PID процесса.

Заключение

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

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *