Как посмотреть процессы в centos

Управление процессами и наблюдение за ними в дистрибутивах Linux (CentOS)

Работа с запущенными процессами

Использование PID процессорных идентификаторов

Наблюдаем за процессами посредством утилиты strace

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

Работа с запущенными процессами

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

Команда top

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

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

Команда htop

Посредством этой усовершенствованной версии команды top можно получать более развернутые данные по процессам. Она доступна в хранилищах. Для установки используем:

sudo apt-get install htop

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

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

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

Источник

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

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

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

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

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

1. Утилита ps

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

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

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

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

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

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

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

2. Утилита top

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

sudo apt install top

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

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

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

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

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

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

3. Утилита htop

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

sudo apt install htop

Читайте также:  двухкомнатная квартира в можге

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

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

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

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

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

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

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

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

5. Утилита atop

sudo apt install atop

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

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

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

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

Выводы

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

Источник

🐹 CentOS 7: Процессы. Сигналы. Команды. Подробная информация о процессе PID. Убиваем процессы PID — команды ps, kill, pkill, killall, xkill. Потребление ресурсов процессами — утилита top.

Опубликовано 2021-01-21 · Обновлено 2021-05-20

Содержание:

1. Введение.

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

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

Например, если вы открыли три окна калькулятора (например, gcalctool), это значит, что вы запустили три процесса.

Сигнал — (signal) — это программные прерывания, посылаемые в (запущенную) программу для указания на то, что произошло важное событие.

Для управления процессами существует такая подсистема как менеджер процессов.

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

Каждый процесс имеет свой контекст.

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

Идентификатор процесса состоит из идентификатора PID и идентификатора родительского процесса PPID.

Все остальные процессы являются дочерними процессами и имеют PPID отличный от нуля.

PID дочернего процесса всегда будет больше чем у родительского. В остальном контекст полностью будет совпадать с родительским.

Операционная система Linux является еще и многопользовательской.

У каждого процесса есть такой параметр как “владелец” — от имени которого выполняется процесс. Это UID процесса. Также у процесса есть такой параметр как GID (по аналогии с GID пользователя). Кроме этого есть такие параметры как EUID (эффективный UID) и EGID (эффективный GID). Возможности процесса в системе определяются именно этими параметрами: EUID и EGID.

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

Nice-фактор — это числовое значение. Чем оно больше тем меньше ресурсов (процессорного времени и так далее) будет выделятся процессу во время его работы.

Многие процессы выполняют операции ввода/вывода информации в/из терминала. Поэтому есть такой параметр как Терминал.

А есть процессы которые работают в фоновом режиме. Такие процессы не привязаны к терминалу. Например, процесс cron.

Процесс может находится в нескольких состояниях:

Для просмотра процессов и их свойств предназначена команда ps.

Читайте также:  лучше сидеть дома чем просто сидеть берия

Команда имеет очень много ключей и параметров. Все их можно посмотреть в man ps.

2. Команды и сигналы kill.

Это связано с Signals (сигналами).

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

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

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

Ответ:

Всего вы можете использовать до 60 сигналов, но все, что нужно знать, это SIG TERM ( 15 ) и SIG KILL ( 9 ).

SIG TERM — этот сигнал запрашивает остановку работы процесса. Он может быть проигнорирован. Процессу дается время на корректное завершение. Если программа завершается корректно, значит она использовала данное время на то, чтобы сохранить свое состояние или результаты работы и освободить ресурсы. Другими словами, ее не заставляли остановиться.

SIG KILL — этот сигнал заставляет процесс прекратить работу немедленно. Программа не может проигнорировать этот сигнал. Несохраненные результаты будут потеряны.

Часть сигналов являются такими которые можно заблокировать. Например, один процесс посылает сигнал TERM другому процессу, а он в свою очередь не закончил операции ввода/вывода. В таком случае второй процесс может заблокировать полученный сигнал (опять таки в обработчике сигнала) до момента выполнения необходимой операции ввода/вывода. Сигнал TERM — это сигнал корректного завершения работы процесса. Обработчик этого сигнала, должен выполнить все необходимые действия для правильного завершения работы.

Несмотря на похожесть отличия есть:

Сигнал KILL не блокируется и не перехватывается и ведет к немедленному завершению процесса.

Сигнал INT в отличии от kill является блокируемым сигналом и перехватываемым.

Сигнал TERM также является перехватываемым и блокируемым и предназначен для корректного (предпочтительного) завершения работы процесса.

Сигнал HUP — сейчас этот сигнал чаще всего интерпретируется процессами как “прочесть конфигурационные файлы”.

Синтаксис использования «kill»:

# kill [сигнал или опция] PID

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

Также обратите внимание, что можно завершать несколько процессов одной командой.

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

Однако, это редкое исключение из правила: используйте kill для этих заранее известных приложений и только для них.

3.1. Проблемы, возникающие при завершении процессов.

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

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

3.2. Сигналы завершения процесса.

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

Сигнал HUP «подвешивает» шелл, поэтому это хороший способ очистить шелл, повисший в ожидании ввода, или закрыть SSH-сессию.

4. Находим PID зависшего процесса.

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

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

Чтобы увидеть информацию о nice-факторе необходимо выполнить команду ps lax :

Ответ:

Особый интерес для нас предоставляют следующие столбцы:

4.1. Ключи и описания.

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

Читайте также:  меня все бросили что делать

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

Например, чтобы найти информацию о процессе с именем top выполните команду:

# ps axu | grep gcalctool

Если процесс top запущен 2 раза подряд, то мы получим:

Пример выполнения команды pidof :

5. «Убиваем» процесс командой kill.

Например, убьем процессы с номером 19750 и номером 19703 :

# kill 19750
# kill 19703

Проверим, закрылись ли они?

Как видно они не закрылись!

Вообще команда kill предназначена для посылки сигнала процессу. По умолчанию, если мы не указываем какой сигнал посылать, посылается сигнал SIGTERM (от слова termination — завершение). SIGTERM указывает процессу на то, что необходимо завершиться. Каждый сигнал имеет свой номер. SIGTERM имеет номер 15.

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

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

Проверим, закрылись ли они?

Сигнал SIGTERM может и не остановить процесс (например, при перехвате или блокировке сигнала), SIGKILL же выполняет уничтожение процесса всегда, так как его нельзя перехватить или проигнорировать.

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

6. «Убиваем» процесс командой pkill.

Команда «pkill» позволяет использовать расширенные шаблоны регулярных выражений и другие критерии соответствия. Вместо использования PID вы теперь можете завершить приложение, введя имя его процесса. Например, для завершения работы Firefox просто введите команду:

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

Ответ:

7. Убиваем процессы командой killall.

Команда killall в Linux предназначена для «убийства» всех процессов, имеющих одно и то же имя. Это удобно, так как нам не нужно знать PID процесса.

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

# yum install psmisc

7.1. В этой ситуации рекомендуется выйти из системы и завершить все запущенные процессы пользователя с помощью команды killall:

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

Выполните в терминале:

8. Убиваем процессы командой xkill.

Xkill — это графический способ завершения приложений.

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

Если вам понравится такой способ, можно настроить для активации xkill горячие клавиши.

9. Если что-то пошло не так.

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

Например, если процесс был запущен от имени пользователя root или от имени другого пользователя системы, то команды kill и killall нужно выполнять от имени суперпользователя, добавляя sudo :

Бывают ситуации, когда вы работаете в графическом интерфейсе (например, GNOME) и вам не удается открыть эмулятор терминала, чтобы остановить зависший процесс. Тогда можно переключиться на виртуальную консоль клавишами Ctrl+Alt+F1, залогиниться в ней и выполнять команды уже из нее, а потом перейти обратно, нажав Ctrl+Alt+F7.

10. Вызов справки.

Справку по использованию любой команды можно получить командой man :

# man ps
# man grep
# man pidof
# man kill
# man killall

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

Для каждого процесса создается каталог по пути /proc/

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

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

Ответ:

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

Ответ:

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

Ответ:

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

Ответ:

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

Ответ:

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

Ответ:

Подробное описание на сайте man7.org.

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

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

Источник

Обучающий онлайн портал