Мониторинг процессов в linux — pidstat

8 ответов

104

Откройте другой терминал и запустите , где foo — это имя невосприимчивой программы. Это должно возвращать строку вывода, которая выглядит примерно так:

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

Чтобы остановить процесс нарушения, выполните следующие действия:
, где pid — это идентификатор процесса программы. Возможно, вам придется использовать свое мнение о том, какой из совпадений должен быть ed, или вы могли бы использовать . Используя сам отправляет SIGTERM, который вы должны попробовать сначала, так как он позволяет программе правильно очищать после себя. Если SIGTERM терпит неудачу, попробуйте SIGHUP, который является более жестким лекарством: . Если все остальное не удается, отправьте SIGKILL. Но вы должны сделать это только в крайнем случае, потому что SIGKILL заставляет ядро ​​немедленно прекратить процесс без возможности очистки. Иногда это может привести к повреждению данных или другим проблемам. Поэтому снова отправьте SIGKILL в крайнем случае. Для этого выполните или .

Если вы используете графический интерфейс, конечно, вам не нужно обманывать эту сумасшедшую статью командной строки, чтобы выполнить эту работу. Просто откройте «Системный монитор», перейдите на вкладку «Процессы», выберите процесс, который вы хотите остановить (Hm, может быть, он использует 90% CPU?) И щелкните его правой кнопкой мыши. Поскольку процесс уже остановлен (это проблема, не так ли?), Выберите в появившемся меню команду «Завершить процесс» или «Убить процесс».

33

Я не думаю, что есть необходимость в таких длинных командах, когда вы можете выполнять те же команды с pgrep, pkill, pidof и т. д.

Чтобы получить pid из текущей программы

pgrep:

ОПИСАНИЕ:
    pgrep просматривает текущие процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout. Все критерии должны соответствовать. Например,

  • Чтобы найти процесс с именем sshd, принадлежащим root.

  • Список процессов, принадлежащих демонам root OR.

pidof:

ОПИСАНИЕ :

Pidof находит идентификатор процесса (pids) названных программ. Он печатает эти идентификаторы на стандартном выходе.

Синтаксис:
       pidof имя_программы

Чтобы убить программу pid, используйте pkill
Пример:

pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name

Флаг -f: Ищет имя процесса (см. man pkill) -o: выберите только самый старый из процессов соответствия. -n: выберите только новейшие из процессов, соответствующих процессу. -l: укажите имя процесса, а также идентификатор процесса.

16

Самый простой способ узнать pid запущенной программы:

Например, если вы начали vim и хотите узнать его pid:

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

Например, если вы используете vi и выполняете , вы не получите правильных результатов.

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

13

Я нашел неплохо использовать регистр без учета регистра, добавив «-i» и используя «aux» вместо «ax», чтобы получить более описательный вывод:

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

Это насильственное убийство. Бросьте «-9», если вы хотите мягкое убийство.

3

Если вы хотите только pid (полезно для скриптов autokill и т. д.)

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

Вы можете сделать:

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

Для тех, кто использует Ubuntu 16.04 LTS, вы должны использовать , а не только по команде line, иначе вы просто получите процессы, порождаемые из конкретного экземпляра терминала, в котором вы находитесь. (Обычно это просто «bash» и «ps» )

Команды для управления процессами

Команда ps

Предназначена для вывода информации о выполняемых процессах. Данная команда имеет много
параметров, о которых вы можете прочитать в руководстве (man ps). Здесь я опишу лишь наиболее
часто используемые мной:

Параметр Описание
-a отобразить все процессы, связанных с терминалом (отображаются процессы всех пользователей)
-e отобразить все процессы
-t список терминалов отобразить процессы, связанные с терминалами
-u идентификаторы пользователей отобразить процессы, связанные с данными идентификаторыми
-g идентификаторы групп отобразить процессы, связанные с данными идентификаторыми групп
-x отобразить все процессы, не связанные с терминалом

Например, после ввода команды ps -a вы увидите примерно следующее:

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

В приведенном выше примере используется перенаправление ввода вывода между программами ps и grep, и как результат получаем информацию обо всех процессах содержащих в строке запуска «httpd».
Данную команду (ps -ax | grep httpd) я написал только лишь в демонстрационных целях — гораздо проще использовать параметр -С программы ps вместо перенаправления ввода вывода и параметр -e вместо -ax.

Программа top

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

Просмотреть информацию об оперативной памяти вы можете с помощью команды free, а о дисковой — df. Информация о зарегистрированных в системе пользователей доступна по команде w.

Изменение приоритета процесса — команда nice

nice команда

Команда nice выполняет указанную команду с пониженным приоритетом, коэффициент понижения указывается в диапазоне 1..19 (по умолчанию он равен 10). Суперпользователь может повышать приоритет команды, для этого нужно указать отрицательный коэффициент, например —10. Если указать
коэффициент больше 19, то он будет рассматриваться как 19.

nohup — игнорирование сигналов прерывания

nohup команда

nohup выполняет запуск команды в режиме игнорирования сигналов. Не игнорируются только сигналы
SIGHUP и SIGQUIT.

kill — принудительное завершение процесса

kill PID

где PID — идентификатор процесса, который можно узнать с помощью команды ps.

Команды выполнения процессов в фоновом режиме — jobs, fg, bg

Команда jobs выводит список процессов, которые выполняются в фоновом режиме, fg — переводит
процесс в нормальные режим («на передний план» — foreground), а bg — в фоновый. Запустить программу в фоновом режиме можно с помощью конструкции &

Спонсоры:

Хостинг:

Maxim ChirkovДобавить, Поддержать, Вебмастеру

Сигналы как часть завершения процесса

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

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

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

Стоит отметить, что процессы в ОС «Линукс» могут реагировать не на все сигналы. Рекомендуется рассмотреть максимально подробно те, которые применяются при завершении процессов:

  • SIGINT. Этот сигнал является самым безобидным. Он будет отправлен процессу, который запущен из терминала путем сочетания клавиш «Ctrl+C». Процесс будет завершен правильно, а управление возвращается к пользователю.
  • SIGQUIT. Такой сигнал также отправляется путём сочетания клавиш, но распространяется на программу, запущенную в самом терминале. Сигнал сообщит ей, что необходимо срочное завершение. В данном случае программа корректно завершится или просто проигнорирует сигнал. Главное отличие от вышеописанного варианта – процесс сопровождается генерированием дампа памяти. Здесь используется сочетание клавиш «Ctrl+/».
  • SIGHUP. Данный сигнал сообщит определенному процессу, что соединение с терминалом управления прервано. Он отправляется не пользователем, а самой системой. Сигнал может возникнуть при закрытии доступа к интернету.
  • SIGTERM. Этот сигнал свидетельствует о немедленном завершении процессов, но обрабатывается с помощью специальных программ. Именно поэтому появляется возможность устранения всех дочерних процессов, освобождения ресурсов.
  • SIGKILL. Такой сигнал также немедленно завершает процессы. Главное отличие от предыдущего варианта – сигнал передаётся не на сам процесс, а на ядро, где в последующем обрабатывается. В этом случае ресурсы и дочерние процессы не завершаются в принудительном порядке.

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

Что такое процесс?

Процесс Linux — это экземпляр программы, запущенный в памяти. Все процессы можно разделить на обычные и фоновые. Более подробно об этом написано в статье управление процессами Linux. Linux — это многопользовательская система, каждый пользователь может запускать одни и те же программы, и даже один пользователь может захотеть запустить несколько экземпляров одной программы, поэтому ядру нужно как-то идентифицировать такие однотипные процессы. Для этого каждому процессу присваивается PID (Proccess Identificator).

Каждый из процессов может находиться в одном из таких состояний:

  • Запуск — процесс либо уже работает, либо готов к работе и ждет, когда ему будет дано процессорное время;
  • Ожидание — процессы в этом состоянии ожидают какого-либо события или освобождения системного ресурса. Ядро делит такие процессы на два типа — те, которые ожидают освобождения аппаратных средств и приостановление с помощью сигнала;
  • Остановлено — обычно, в этом состоянии находятся процессы, которые были остановлены с помощью сигнала;
  • Зомби — это мертвые процессы, они были остановлены и больше не выполняются, но для них есть запись в таблице процессов, возможно, из-за того, что у процесса остались дочерние процессы.

А теперь давайте перейдем ближе к практике и поговорим о том, как узнать запущенные процессы linux.

Отображение при помощи параметра -l имени команды и ее аргументов

По умолчанию, pidstat отображает только имя команды. т.е. без полного пути команды и ее аргументов. Например, в столбце команды, вы увидите только слово «java» (которое является лишь именем программы).

$ pidstat -C java
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

11:00:25       PID    %usr %system  %guest    %CPU   CPU  Command
11:00:25      3288    0.04    0.03    0.00    0.07     0  java
11:00:25     17861    0.03    0.02    0.00    0.05     6  java

Однако, когда вы используете параметр -l, то будет отображен полный путь к команде и все ее аргументы, например, так, как это показано ниже.

$ pidstat -C java -l
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

11:00:31       PID    %usr %system  %guest    %CPU   CPU  Command
11:00:31      3288    0.04    0.03    0.00    0.07     0  /usr/bin/java -Djava.util.logging.config.file=/home/tomcat/apache-tomcat-7.0.56/conf/logging.properties
11:00:31     17861    0.03    0.02    0.00    0.05     6  java -jar /home/rabbit/myapp.jar /home/app/conf/myapp.conf

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

# pidstat -p 23493 1
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

06:25:50          PID    %usr %system  %guest    %CPU   CPU  Command
06:25:51        23493    0.00    0.00    0.00    0.00     0  mysqld
06:25:52        23493    0.00    0.00    0.00    0.00     0  mysqld

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

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

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

Самые популярные команды для решения этой задачи — это ps, top и htop. Последние две команды мы уже рассматривали в предыдущих статьях, собственно, они интерактивные и с ними у вас не возникнет проблем. Сейчас же хотелось бы остановиться более детально на ps. Сначала рассмотрим общий синтаксис команды, здесь все очень просто:

$ ps опции

$ ps опции | grep параметр

Во втором варианте мы используем утилиту grep для того, чтобы отобрать нужные нам процессы по определенному критерию. Теперь рассмотрим опции утилиты. Они делятся на два типа — те, которые идут с дефисом Unix и те, которые используются без дефиса — BSD. Лучше пользоваться только опциями Unix, но мы рассмотрим и одни и другие. Заметьте, что при использовании опций BSD, вывод утилиты будет организован в BSD стиле.

  • -A, (a) — выбрать все процессы;
  • -a — выбрать все процессы, кроме фоновых;
  • -d, (g) — выбрать все процессы, даже фоновые, кроме процессов сессий;
  • -N — выбрать все процессы кроме указанных;
  • — выбирать процессы по имени команды;
  • -G — выбрать процессы по ID группы;
  • -p, (p) — выбрать процессы PID;
  • —ppid — выбрать процессы по PID родительского процесса;
  • -s — выбрать процессы по ID сессии;
  • -t, (t) — выбрать процессы по tty;
  • -u, (U) — выбрать процессы пользователя.

Опции форматирования:

  • — отображать информацию планировщика;
  • -f — вывести максимум доступных данных, например, количество потоков;
  • -j, (j) — вывести процессы в стиле Jobs, минимум информации;
  • -M, (Z) — добавить информацию о безопасности;
  • -o, (o) — позволяет определить свой формат вывода;
  • —sort, (k) — выполнять сортировку по указанной колонке;
  • -L, (H)— отображать потоки процессов в колонках LWP и NLWP;
  • -m, (m) — вывести потоки после процесса;
  • -V, (V) — вывести информацию о версии;
  • -H — отображать дерево процессов linux;

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

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

Все процессы, включая фоновые и лидеры групп:

Чтобы вывести больше информации о процессах используйте опцию -f:

При использовании опции -f команда выдает такие колонки:

  • UID — пользователь, от имени которого запущен процесс;
  • PID — идентификатор процесса;
  • PPID — идентификатор родительского процесса;
  • C — процент времени CPU, используемого процессом;
  • STIME — время запуска процесса;
  • TTY — терминал, из которого запущен процесс;
  • TIME — общее время процессора, затраченное на выполнение процессора;
  • CMD— команда запуска процессора;
  • LWP — показывает потоки процессора;
  • PRI — приоритет процесса.

Например, также можно вывести подробную информацию обо всех процессах:

Больше информации можно получить, использовав опцию -F:

Если вы хотите получить еще больше информации, используйте вместо -f опцию -l:

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

С помощью опции -H можно отобразить дерево процессов:

Если вас интересует информация только об определенном процессе, то вы можете использовать опцию -p и указать pid процесса linux:

Через запятую можно указать несколько PID:

Опция позволяет фильтровать процессы по имени, например, выберем только процессы chrome:

Дальше можно использовать опцию -L чтобы отобразить информацию о процессах:

Очень интересно то, с помощью опции -o можно настроить форматирование вывода, например, вы можете вывести только pid процесса linux и команду:

Вы можете выбрать такие колонки для отображения: pcpu, pmem, args, comm, cputime, pid, gid, lwp, rss, start, user,vsize,priority. Для удобства просмотра можно отсортировать вывод программы по нужной колонке, например, просмотр процессов linux, которые используют больше всего памяти:

Или по проценту загрузки cpu:

Еще одна опция — M, которая позволяет вывести информацию про права безопасности и флаги SELinux для процессов:

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

Мы рассмотрели все основные возможности утилиты ps. Дальше вы можете поэкспериментировать с ее параметрами и опциями чтобы найти нужные комбинации, также можно попытаться применить опции BSD.

Каким процессом занят файл Linux

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

С помощью утилиты lsof можно посмотреть, какие процессы используют директорию или файл в данный момент. Например, откроем аудио-файл в плеере totem, а затем посмотрим, какой процесс использует её файл:

В начале строки мы видим название программы, а дальше идёт её PID. Есть ещё одна утилита, которая позволяет выполнить подобную задачу — это fuser:

Здесь будет выведен только файл и PID процесса. После PID идёт одна буква, которая указывает, что делает этот процесс с файлом или папкой:

  • c — текущая директория;
  • r — корневая директория;
  • f — файл открыт для чтения или записи;
  • e — файл выполняется как программа;
  • m — файл подключен в качестве библиотеки.

Просматриваем список процессов в Linux

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

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

Способ 1: Терминал

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

Обратим внимание мы лишь на одну команду, однако рассмотрим самые популярные и полезные аргументы

  1. Для начала запустите консоль, нажав на соответствующий значок в меню или используя комбинацию клавиш Ctrl + Alt + T.

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

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

Чтобы отобразились сразу все процессы, стоит добавить -A. В таком случае команда выглядит как (A обязательно должна быть в верхнем регистре). После нажатия на клавишу Enter вы сразу увидите сводку строк.

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

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

Тогда полный список процессов с расширенной информацией будет вызываться через . В таблице вы увидите UID — имя пользователя, запустившего процесс, PID — уникальный номер, PPID — номер родительского процесса, C — количество времени нагрузки на ЦП в процентах, когда активен процесс, STIME — время активации, TTY — номер консоли, откуда был совершен запуск, TIME — время работы, CMD — команда, запустившая процесс.

Каждый процесс имеет свой PID (Proccess Identificator). Если вы хотите увидеть сводку о конкретном объекте, пропишите , где PID — номер процесса.

Отдельно хотелось бы затронуть и сортировку. Например, команда позволяет поставить все строки в порядке нагрузки на CPU, а — по затрачиваемому объему оперативной памяти.

Выше мы рассказали об основных аргументах команды , однако присутствуют еще и другие параметры, например:

  • — отображение дерева процессов;
  • — вывод версий объектов;
  • — выборка всех процессов кроме заданных;
  • — отображение только по имени команды.

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

Способ 2: Системный монитор

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

Подробнее: Способы запуска Системного монитора в Linux

  1. Запустите «Системный монитор» любым удобным методом, например, через меню.

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

Щелкните правой кнопкой мыши на интересующей строке, чтобы перейти в ее свойства.

Здесь отображаются практически все те же данные, которые доступны к получению через «Терминал».

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

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

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

Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.

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

Программа top показывает запущенные в Linux процессы программ и служб.

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

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

Пример интерфейса top после настройки:

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

Кстати, у программы top имеется интересный аналог, подробности о нём смотрите в статье «Инструкция по использованию команды htop для интерактивного просмотра процессов в Linux».

How To Use ps to List Processes

Both and provide a nice interface to view running processes similar to a graphical task manager.

However, these tools are not always flexible enough to adequately cover all scenarios. A powerful command called is often the answer to these problems.

When called without arguments, the output can be a bit lack-luster:

This output shows all of the processes associated with the current user and terminal session. This makes sense because we are only running and with this terminal currently.

To get a more complete picture of the processes on this system, we can run the following:

These options tell to show processes owned by all users (regardless of their terminal association) in a user-friendly format.

To see a tree view, where hierarchal relationships are illustrated, we can run the command with these options:

As you can see, the process is shown to be a parent of the process and the others.

A Note About Process IDs

In Linux and Unix-like systems, each process is assigned a process ID, or PID. This is how the operating system identifies and keeps track of processes.

A quick way of getting the PID of a process is with the command:

This will simply query the process ID and return it.

The first process spawned at boot, called init, is given the PID of “1”.

This process is then responsible for spawning every other process on the system. The later processes are given larger PID numbers.

A process’s parent is the process that was responsible for spawning it. Parent processes have a PPID, which you can see in the column headers in many process management applications, including , and .

Any communication between the user and the operating system about processes involves translating between process names and PIDs at some point during the operation. This is why utilities tell you the PID.

Parent-Child Relationships

Creating a child process happens in two steps: fork(), which creates new address space and copies the resources owned by the parent via copy-on-write to be available to the child process; and exec(), which loads an executable into the address space and executes it.

In the event that a child process dies before its parent, the child becomes a zombie until the parent has collected information about it or indicated to the kernel that it does not need that information. The resources from the child process will then be freed. If the parent process dies before the child, however, the child will be adopted by init, though it can also be reassigned to another process.

Ссылка на основную публикацию