Как определить зависший процесс linux

Обновлено: 07.07.2024

Есть ли в Linux какая-либо команда, с помощью которой я могу узнать, находится ли процесс в состоянии зависания.

4 ответа

Есть ли в Linux какая-либо команда, с помощью которой я могу узнать, находится ли процесс в состоянии зависания.

Нет команды, но однажды мне пришлось сделать очень глупый хак, чтобы сделать что-то подобное. Я написал Perl-скрипт, который периодически (каждые 30 секунд в моем случае):

  • запустите ps , чтобы найти список PID наблюдаемых процессов (вместе со временем выполнения и т. д.)
  • цикл по PID
  • start gdb присоединение к процессу с помощью его PID, выгрузка трассировки стека из него с помощью thread apply all where , отсоединение от процесса
  • процесс был объявлен зависшим, если:
    • трассировка его стека не изменилась, а время не изменилось после 3 проверок
    • трассировка стека не изменилась, и время указывало на 100% загрузку ЦП после 3 проверок

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

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

    вы можете проверить файлы

    Что вы подразумеваете под "состоянием зависания"? Как правило, процесс, который не отвечает и использует 100% ЦП, застревает в бесконечном цикле. Но нет никакого способа определить, произошло ли это, или процесс может в конечном итоге не достичь цикла выйти из состояния и продолжить.

    К сожалению, для процесса нет состояния зависания. Теперь зависать можно в тупике. Это состояние блока. Потоки в процессе заблокированы. Другими вещами могут быть блокировка в реальном времени, когда процесс выполняется, но снова и снова. Этот процесс находится в рабочем состоянии. Итак, как вы можете видеть, нет определенного зависшего состояния. Как и предполагалось, вы можете использовать команду top, чтобы увидеть, использует ли процесс 100% ЦП или много памяти.

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

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

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

    • Просмотр запущенных процессов
    • Просмотр информации о процессах
    • Поиск процессов в Linux
    • Изменение приоритета процессов
    • Завершение процессов
    • Ограничение памяти доступной процессу

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

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

    Начнем с того, что разберемся в терминах. По сути, процесс - это каждая программа. Как я уже говорил для каждой запускаемой программы создается отдельный процесс. В рамках процесса программе выделяется процессорное время, оперативная память и другие системные ресурсы. У каждого процесса есть свой идентификатор, Proccess ID или просто PID, по ним, чаще всего и определяются процессы Linux. PID определяется неслучайно, как я уже говорил, программа инициализации получает PID 1, а каждая следующая запущенная программа - на единицу больше. Таким образом PID пользовательских программ доходит уже до нескольких тысяч.

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

    Например, посмотрим папку процесса 1. В папке есть другие под каталоги и много файлов. Файл cmdline содержит информацию о команде запуска процесса:

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

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

    В Linux есть очень большое количество утилит для решения различных задач по управлению процессами. Это и такие многофункциональные решения, как htop, top, а также простые утилиты, например, ps, kill, killall, who и т д. Я не буду рассматривать в этой статье графические утилиты, и top тоже рассматривать не буду. Первое потому что слишком просто, второе - потому что htop лучше. Мы остановимся на работе с программой htop и ее аналогами в форме утилит в стиле GNU, одна утилита - одна функция.

    Давайте установим htop, если она у вас еще не установлена. В Ubuntu это делается так:

    sudo apt install htop

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

    Посмотреть запущенные процессы

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

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

    htop

    Вы можете увидеть такую информацию о процессе:

    • PID - идентификатор процесса
    • USER - пользователь, от которого был запущен процесс
    • PRI - приоритет процесса linux на уровне ядра (обычно NI+20)
    • NI - приоритет выполнения процесса от -20 до 19
    • S - состояние процесса
    • CPU - используемые ресурсы процессора
    • MEM - использованная память
    • TIME - время работы процесса

    К отображению можно добавить и дополнительные параметры, но эти главные. Добавить параметры можно с помощью меню Setup. Там все очень просто, читайте подсказки и следуйте указаниям. Например, добавлен параметр PPID:


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

    htop2

    Также есть интересная возможность разместить процессы в виде дерева. Вы сможете увидеть, каким процессом был запущен тот или иной процесс. Для отображения дерева нажмите кнопку F5:

    htop3

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

    ps

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

    • -e - вывести информацию обо всех процессах
    • -a - вывести информацию обо всех наиболее часто запрашиваемых процессах
    • -t - показывать только процессы из этого терминала
    • -p - показывать информацию только об указанном процессе
    • -u - показывать процессы только определенного пользователя

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

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

    Список будет отсортирован в обратном порядке, внизу значения больше, вверху - меньше. Если нужно в обратном порядке, добавьте минус:

    ps1

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

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

    pstree

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

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

    Чтобы найти процесс linux в htop можно использовать кнопку F3. Нажмите F3 и наберите нужное слово. Дальше чтобы перейти к следующему вхождению нажимайте F2 или Esc для завершения поиска:

    htop4

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

    htop6

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

    ps aux | grep chromium

    Это очень часто употребляемая команда.

    Изменение приоритета процессов

    Приоритет процесса linux означает, насколько больше процессорного времени будет отдано этому процессу по сравнению с другими. Так мы можем очень тонко настроить какая программа будет работать быстрее, а какая медленнее. Значение приоритета может колебаться от 19 (минимальный приоритет) до -20 - максимальный приоритет процесса linux. Причем, уменьшать приоритет можно с правами обычного пользователя, но чтобы его увеличить нужны права суперпользователя.

    В htop для управления приоритетом используется параметр Nice. Напомню, что Priv, это всего лишь поправка, она в большинстве случаев больше за Nice на 20. Чтобы изменить приоритет процесса просто установите на него курсор и нажимайте F7 для уменьшения числа (увеличения приоритета) или F8 - для увеличения числа.

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

    nice -n 10 apt-get upgrade

    Или изменить приоритет для уже существующего по его pid:

    renice -n 10 -p 1343

    Завершение процессов в Linux

    Если процесс завис и не отвечает, его необходимо завершить. В htop, чтобы убить процесс Linux, просто установите курсор на процесс и нажмите F9:

    htop7

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

    • SIGTERM - попросить процесс сохранить данные и завершится
    • SIGKILL - завершить процесс немедленно, без сохранения

    Вообще сигналов есть несколько десятков, но мы не будем их рассматривать. Отправим сигнал SIGKILL:

    Также можно воспользоваться утилитой kill:

    Также можно уничтожить процесс по имени:

    Ограничение процессов

    Управление процессами в Linux позволяет контролировать практически все. Вы уже видели что можно сделать, но можно еще больше. С помощью команды ulimit и конфигурационного файла /etc/security/limits.conf вы можете ограничить процессам доступ к системным ресурсам, таким как память, файлы и процессор. Например, вы можете ограничить память процесса Linux, количество файлов и т д.

    Запись в файле имеет следующий вид:

    <домен> <тип> <элемент> <значение>

    • домен - имя пользователя, группы или UID
    • тип - вид ограничений - soft или hard
    • элемент - ресурс который будет ограничен
    • значение - необходимый предел

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

    Рассмотрим основные ограничения, которые можно применить к процессам:

    • nofile - максимальное количество открытых файлов
    • as - максимальное количество оперативной памяти
    • stack - максимальный размер стека
    • cpu - максимальное процессорное время
    • nproc - максимальное количество ядер процессора
    • locks - количество заблокированных файлов
    • nice - максимальный приоритет процесса

    Например, ограничим процессорное время для процессов пользователя sergiy:

    sergiy hard nproc 20

    Посмотреть ограничения для определенного процесса вы можете в папке proc:

    Max cpu time unlimited unlimited seconds
    Max file size unlimited unlimited bytes
    Max data size unlimited unlimited bytes
    Max stack size 204800 unlimited bytes
    Max core file size 0 unlimited bytes
    Max resident set unlimited unlimited bytes
    Max processes 23562 23562 processes
    Max open files 1024 4096 files
    Max locked memory 18446744073708503040 18446744073708503040 bytes
    Max address space unlimited unlimited bytes
    Max file locks unlimited unlimited locks
    Max pending signals 23562 23562 signals
    Max msgqueue size 819200 819200 bytes
    Max nice priority 0 0
    Max realtime priority 0 0
    Max realtime timeout unlimited unlimited us

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

    Вот опции команды:

    • -S - мягкое ограничение
    • -H - жесткое ограничение
    • -a - вывести всю информацию
    • -f - максимальный размер создаваемых файлов
    • -n - максимальное количество открытых файлов
    • -s - максимальный размер стека
    • -t - максимальное количество процессорного времени
    • -u - максимальное количество запущенных процессов
    • -v - максимальный объем виртуальной памяти

    Например, мы можем установить новое ограничение для количества открываемых файлов:

    Установим лимит оперативной памяти:

    ulimit -Sv 500000

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

    Выводы

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

    Процесс - это объект, который состоит из адресного пространства памяти и набора структур данных. Процессы являются частью операционной системы.
    Грубо говоря, процесс это запущенная программа или служба … но следует отметить, что работающая программа содержит один или более процессов.
    Также следует отметить, что наряду с процессами есть понятие задача, которую выполняет командный процессор. Задача - это рабочая единица командного процессора. Задачи находятся на более высоком уровне, чем процессы, операционная система ничего о них не знает.

    2. Имеются простые способы узнать/оценить, находится процесс в зависшем состоянии или нет. Правда в поиске виновника это нам не поможет, но хотя бы прояснит немного ситуацию.
    2.1 Посмотреть параметр state процесса
    можно добавить это в команду ps -eo pid,state,pcpu,pmem,comm | grep <PID>
    или сразу обратится к первоисточнику, из которого ps черпает эту информацию
    cat /proc/<PID>/status | grep State
    2.2 Есть еще два интересных параметр voluntary_ctxt_switches и nonvoluntary_ctxt_switches (показывают сколько раз процессор получал кванты CPU и отдавал назад)
    cat /proc/<PID>/status | grep voluntary
    Если с течением времени эти параметры не меняются, то это говорит о том, приложение зависло.
    2.3 Можно узнать место в коде ядра, где зависло - узнать имя функции, которая привела процесс к состоянию спячки/ожидания.
    Для этого можно использовать ту же утилиту ps, но добавив поле wchan
    ps -eo pid,pcpu,pmem,comm,status,wchan | grep <PID>
    или посмотреть параметр stack
    cat /proc/<PID>/stack
    Верхняя функция (верхушка стэка) и покажет эту функцию. Что означает эта функция, можно нагуглить.
    Есть и другие ядерные вещи, но, имхо, толку от них обычным юзерам мало, нам нужно узнать хотя бы причину, намек, виновника блокировки, если это блокировка.
    А потому здесь нужны более серъезные утилиты.
    PS 1 - уточнение для утилиты ps в части wchan - это адрес события, которого ожидает процесс. У активного процесса эта колонка пустая.
    PS 2 - можно для нахождения значений wchan использовать и такую штуку
    cat /proc/<PID>/stat | ./procstat
    Например, для активного нормального процесса palemoon
    где procstat - небольшая програмка для распарсивания вывода cat /proc/<PID>/stat (имеется исходник procstat.c, который нужно скомпилить).

    3. Посмотрели и убедились, что приложение зависло, далее нужно использовать другие утилиты.
    Привожу опять цитату умных дядей
    Явный признак такого состояния - 0% CPU, что означает, что процесс находится в каком-то блокирующем системном вызове, который приводит к тому, что ядро усыпляет процесс.
    3.1 В этом случае рекомендуют утилиту strace (приаттачится к процессу)
    вообщем на любителя и описывать нюансы работы утилиты strace не буду (всего не опишешь).
    Только отмечу один момент - блокировки - в конце вывода будет строка типа - flock(3, LOCK_EX, что говорит о том, что файл, имеющий дескриптор 3, заблокирован.
    Нужно узнать что это за файл - ls /proc/<PID>/fd , получим что то типа /tmp/file.lock
    и далее находим процесс, удерживающий этот файл - lsof | grep /tmp/file.lock
    3.2 Можно использовать и утилиту gdb, но для получения информативности необходимо чтобы пакет исследуемого приложения был собран с отладочной информацией. Хотя если анализировать только стэк, то можно и без отладочной информации - как правило, если трассировка стека не меняется с течением времени (достаточно несколько проверок с периодичностью в несколько минут), то приложение висит. Также на вершине стэка увидим функцию, которая к этому привела.
    А вот чтобы выполнить отладку зависшего процесса, необходимо, во 1-ых, чтобы пакет был собран с отладочной информацией и, во 2-ых, иметь навык использования отладки с помощью gdb.

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

    EDIT 1 - и, конечно, у кого появится что то новенькое, уточняющее неплохо выкладывать здесь же - пусть все будет в одном месте.

    .
    Дополнение/уточнение от 05.06.2019

    В части зависания можно придерживаться следующих правил (но не забывать, что бывают и исключения)
    Приложение скорее всего заблокировано и ничего не делает если cpu и mem не загружены.
    Приложение находится в бесконечном цикле - cpu под 100% и возможно загружена память.
    Приложению не хватает памяти - сильное торможение, долгий ответ на запросы, загружена память.

    В части определения зависшего дескриптора (при использование strace) вместо ls /proc/<PID>/fd можно использовать readlink /proc/<PID>/fd/3

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

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

    Каждый процесс в Linux имеет свой идентификатор, называемый PID. Перед тем, как выполнить остановку процесса, нужно определить его PID. Для этого воспользуемся командами ps и grep. Команда ps предназначена для вывода списка активных процессов в системе и информации о них. Команда grep запускается одновременно с ps (в канале) и будет выполнять поиск по результатам команды ps. Вывести список всех процессов можно, выполнив в командной строке:

    Но, как правило, список очень большой и найти процесс, который мы хотим «убить», бывает не так просто. Здесь на помощь приходит команда grep. Например, чтобы найти информацию о процессе с именем gcalctool выполните команду:

    Команда grep выполнит поиск по результатам команды ps и на экран будут выведены только те строки, которые содержат строку (слово) gcalctool. Здесь есть одна интересная деталь, например, если у вас не запущено приложение gcalctool, то после выполнения ps axu | grep gcalctool вы получите:

    То есть мы получили сам процесс grep, так как в качестве параметра команде мы указали слово gcalctool, и grep нашел сам себя в выводе команды ps.

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

    Здесь нас интересует строка: «yuriy 25609 7.6 0.4 500840 17964 ? Sl 10:20 0:00 gcalctool». Число 25609 и есть идентификатор (PID) процесса gcalctool.

    Есть еще один более простой способ узнать PID процесса — это команда pidof, которая принимает в качестве параметра название процесса и выводит его PID. Пример выполнения команды pidof:

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

    Когда известен PID процесса, мы можем убить его командой kill. Команда kill принимает в качестве параметра PID процесса. Например, убьем процесс с номером 25609:

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

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

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

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

    Команда killall, также как и kill, по умолчанию шлет сигнал SIGTERM. Чтобы послать другой сигнал нужно воспользоваться опцией -s. Например:

    Заключение

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

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

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

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

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

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

    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

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