Работа с процессами в Linux
Список процессов
Вывести на экран список текущих процессов, запущенных пользователем, можно командой:
Чтобы посмотреть список всех процессов с дополнительной информацией, вводим:
Мы увидим, примерно, следующее:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 661 0.0 0.0 4072 8 tty1 Ss+ Jul03 0:00 /sbin/mingetty
root 662 0.0 0.0 4072 8 tty2 Ss+ Jul03 0:00 /sbin/mingetty
root 16355 0.0 0.0 171636 3308 pts/0 S 15:46 0:00 sudo su
root 16366 0.0 0.0 140896 1556 pts/0 S 15:46 0:00 su
root 16368 0.0 0.0 108316 1944 pts/0 S 15:46 0:00 bash
root 18830 0.0 0.0 110244 1172 pts/0 R+ 16:20 0:00 ps u
- USER — учетная запись пользователя, от которой запущен процесс.
- PID — идентификатор процесса.
- %CPU — потребление процессорного времени в процентном эквиваленте.
- %MEM — использование памяти в процентах.
- VSZ — Virtual Set Size. Виртуальный размер процесса (в килобайтах).
- RSS — Resident Set Size. Размер резидентного набора (количество 1K-страниц в памяти).
- TTY — терминал, из под которого был запущен процесс.
- STAT — текущее состояние процесса. Могут принимать значения:
- R — выполнимый процесс;
- S — спящий;
- D — в состоянии подкачки на диске;
- T — остановлен;
- Z — зомби.
- W — не имеет резидентных страниц;
- Дмитрий Моск — IT-специалист.
Настройка серверов, компьютерная помощь.
Как управлять процессами в операционной системе Linux
Источник
Список процессов Linux
На сайте уже есть несколько статей про процессы Linux, в которых подробно описано как ими управлять или как завершить один или группу процессов, но это еще не все. Чтобы правильно управлять процессами и ориентироваться в них вам нужно научиться анализировать список процессов Linux, понимать что значит каждый пункт и зачем он нужен.
В этой статье мы подробно рассмотрим как посмотреть список процессов различными способами, разберем какими бывают процессы, почему так происходит и что с этим делать.
Список процессов в Linux
Я не буду подробно рассказывать про каждую команду, которую можно применять для просмотра списка запущенных процессов, вместо этого мы пройдёмся по основным утилитам для решения этой задачи, рассмотрим как посмотреть список потоков процесса, вывести процессы, которые выполняются на определённом ядре, а также как найти скрытые процессы. Но сначала надо разобраться с терминами.
- Процесс — если говорить простыми словами, это программа и её данные, загруженные в память компьютера;
- Дочерний процесс — процессы могут запускать другие процессы для выполнения параллельных задач или других целей такие процессы называются дочерними. Для них выделяется отдельная область в памяти;
- Поток — поток отличается от процесса тем, что использует ту же память, данные и дескрипторы файлов, что и процесс, в котором он был создан.
1. Утилита ps
Самый простой способ посмотреть список процессов, запущенных в текущей командой оболочке, использовать команду ps без параметров:
Но вряд-ли вас интересует именно это. Чтобы посмотреть все процессы, добавьте опцию -e, а для максимально подробной информации — опцию -F:
Вот значение основных колонок в выводе утилиты:
- UID — имя пользователя, от имени которого работает процесс;
- PID — идентификатор пользователя;
- PPID — идентификатор родительского процесса пользователя;
- C — расходование ресурсов процессора, в процентах;
- SZ — размер процесса;
- RSS — реальный размер процесса в памяти;
- PSR — ядро процессора, на котором выполняется процесс;
- STIME — время, когда процесс был запущен;
- TTY — если процесс привязан к терминалу, то здесь будет выведен его номер;
- TIME — общее время выполнения процесса (user + system);
- CMD — команда, которой был запущен процесс, если программа не может прочитать аргументы процесса, он будет выведен в квадратных скобках;
Чтобы посмотреть список процессов в виде дерева, и понимать какой процесс имеет какие дочерние процессы, выполните команду:
Для просмотра списка процессов с потоками используйте опцию -L:
Здесь появятся ещё две дополнительных колонки:
- LWP — Это сокращение от LightWeight Proccess. Идентификатор потока;
- NLWP — количество потоков у этого процесса.
Чтобы посмотреть список процессов определенного пользователя, например, sergiy используйте опцию -u:
Теперь давайте перейдём к другим, более интересным, интерактивным утилитам.
2. Утилита top
Утилита top не поставляется вместе с системой, поэтому вам придется её установить. Для этого в Ubuntu выполните:
sudo apt install top
Программа позволяет интерактивно просматривать список запущенных процессов Linux. Чтобы вывести список процессов Linux выполните команду:
Колонки, которые выводит программа очень похожи на ps:
- PID — идентификатор процесса;
- USER — имя пользователя, от имени которого выполняется процесс;
- PR — приоритет планировщика, установленный для процесса;
- NI — рекомендуемый приоритет процесса. Это значение можно менять, может не совпадать с реальным приоритетом планировщика;
- VIRT — всё, что находится в памяти, используется или зарезервировано для использования;
- RES — всё, что находится в оперативной памяти и относится к процессу. Расшифровывается как Resident Memory Size, указывается в килобайтах;
- SHR — часть памяти из RES, которую занимают ресурсы, доступные для использования другим процессам. Расшифровывается — Shared Memory Size.
- S — состояние процесса: D — ожидает завершения операции, R — запущен, S — спит, T — остановлен, t — остановлен отладчиком, Z — зомби;
- %CPU — процент использования ресурсов процессора;
- %MEM — процент использования ресурсов оперативной памяти на основе колонки RES;
- TIME — обще процессорное время, которое процесс использовал с момента запуска;
- COMAND — команда, с помощью которой был запущен процесс.
Для того чтобы сделать вывод программы цветным, нажмите Z:
Чтобы вывести дерево процессов Linux нажмите сочетание клавиш Shift+V:
Для отображения потоков нажмите Shift + H:
Если вам недостаточно стандартных полей с информацией о процессах, вы можете нажать Shift + F и выбрать дополнительные поля, которые надо отображать. Для выбора или удаления поля используйте пробел:
3. Утилита htop
Это ещё более мощная утилита для просмотра запущенных процессов в Linux. Пользоваться ею намного удобнее. Здесь поддерживаются не только горячие клавиши, но и управление мышью. А ещё она выводит всё в цвете, поэтому смотреть на данные намного приятнее. Для установки программы выполните:
sudo apt install htop
Для того чтобы запустить выполните в терминале:
Колонки, которые вы увидите в выводе программы, аналогичны тем, что доступны в top, поэтому я не буду рассматривать их здесь отдельно. Для настройки выводимых данных нажмите кнопку F2, затем перейдите в раздел Display Options:
Здесь надо отметить Tree view для вывода списка процессов в виде дерева, а также снять отметки с пунктов Hide threads. для отображения потоков. Здесь есть как потоки пространства пользователя userland process threads, так и потоки пространства ядра — kernel threads. Теперь всё это будет отображаться:
Для того чтобы настроить какие колонки будут отображаться используйте пункт меню Columns:
Тут вы можете выбрать какие колонки отображать, а какие нет, а также можете настроить их порядок.
4. Программа Gnome Monitor
Вы можете смотреть запущенные процессы не только в терминале, но и в графическом интерфейсе. Для этого можно использовать утилиту Gnome Monitor. У неё намного меньше возможностей, по сравнению даже с ps, но зато у неё есть графический интерфейс. Вы можете запустить программу из главного меню системы:
По умолчанию утилита отображает только процессы текущего пользователя. Если вы хотите получить все процессы кликните по иконке бутерброда и выберите Все процессы:
Теперь программа отображает все запущенные процессы Linux в системе. Здесь вы можете выполнять поиск по процессам, завершать их и многое другое. Но потоков и дерева процессов программа не показывает.
5. Утилита atop
Эта программа тоже позволяет посмотреть процессы в Linux , но немного в другом ключе. Утилиту больше интересует сколько тот или иной процесс потребляет ресурсов системы. Утилита даже может показывать потребление процессами пропускной способности диска и сети, но для этого ей необходим специальный патч ядра. Для установки программы в Ubuntu выполните:
sudo apt install atop
Затем запустите её:
Вот основные колонки, которые выводит утилита и их значения:
- PID — идентификатор процесса;
- CID — идентификатор контейнера, используется для контейнеров Docker;
- SYSCPU — время, потраченное процессом на выполнение в пространстве ядра;
- USRCPU — время, потраченное процессом на выполнение в пространстве пользователя;
- VGROW — увеличение использования памяти колонки VIRT за последний период;
- RGROW — увеличение использования памяти колонки RSS за последний период;
- ST — статус процесса, N — новый, E — завершенный, S и С — процесс завершен принудительно с помощью сигнала;
- EXC — код выхода или код сигнала, которым был завершен процесс;
- THR — общее количество потоков в этом процессе;
- S — состояние процесса, аналогично описанному для top;
- CPUNR — номер ядра процессора, на котором запущен основной поток процесса;
- CPU — процент использования ресурсов процессора;
- CMD — команда, которой была запущена программа;
- MEM — процент использования памяти;
Для того чтобы включить отображение потоков процесса нажмите y:
Для просмотра информации о памяти нажмите m, если хотите вернутся обратно, нажмите g:
Выводы
В этой статье мы разобрали самые основные способы посмотреть список процессов в Linux, как видите есть простые способы, но есть и более сложные и информативные. Какими способами вы пользуетесь чаще всего? Напишите в комментариях!
Источник
Команда stat в Linux
В одной из прошлых статей мы говорили о том, что у каждого файла и папки в файловой системе есть так называемая структура Inode в которой хранятся метаданные этого объекта. Там хранится владелец, группа владельца, время изменения, создания и доступа к файлу, а также другая информация. Её можно увидеть не только с помощью инструментов отладки файловой системы.
Часть из этой информации показывает утилита ls, но если вам нужно больше, то можно воспользоваться командой stat. В этой статье мы рассмотрим как пользоваться этой командой в Linux.
Команда stat в Linux
Синтаксис команды очень простой. Ей надо передать опции и путь к файлу, для которого надо посмотреть информацию:
$ stat опции /путь/к/файлу
Опции передавать не обязательно и их совсем не много:
- -L, dereference — показывать информацию о файле вместо символической ссылки;
- -f, —file-system — показывать информацию о файловой системе в которой расположен файл;
- -c, —format — позволяет указать формат вывода вместо стандартного, каждый файл выводится с новой строки;
- —printf — аналогично —format, только для новой строки надо использовать \n;
- -t, —terse — показ информации в очень кратком виде, в одну строку;
- —version — показать версию утилиты.
Это все опции команды. Теперь давайте разберемся с примерами использования. Чтобы посмотреть информацию о файле достаточно запустить программу без опций передав ей путь к файлу, например /etc/passwd:
Рассмотрим что означает вывод программы:
- Файл (File) — путь к файлу по которому показывается информация;
- Размер (Size) — размер файла в байтах;
- Блок В/В (IO Block) — размер блока файловой системы в байтах;
- Блоков (Blocks) — количество блоков файловой системы, занятых файлом;
- Устройство (Device) — идентификатор устройства, например HDD, на котором сохранён файл;
- Inode — уникальный номер Inode этого файла;
- Ссылки (Links) — количество жестких ссылок на этот файл;
- Доступ (Access) — права доступа к файлу;
- Uid — идентификатор и имя пользователя-владельца файла;
- Gid — идентификатор и имя группы файла;
- Доступ (Access) — время последнего доступа к файлу;
- Модифицирован (Modify) — время когда в последний раз изменялся контент файла;
- Изменен (Change) — время, когда в последний раз изменялись атрибуты файла или контент файла;
- Создан (Birth) — зарезервировано для отображения первоначальной даты создания файла, но пока ещё не реализовано.
Надо ещё немного поговорить про формат времени. Например, время последнего доступа к файлу — 2020-12-02 18:25:01.043831739 +0200. Это время показывается с учётом временной зоны. А цифры +0200 показывают, что временная зона на компьютере, который создал или модифицировал этот файл на два часа больше чем UTC, то есть Europe/Kiev в зимнее время.
Если попробовать передать утилите символическую ссылку, то она покажет информацию только из Inode самой ссылки:
Для того чтобы увидеть информацию о файле, на который указывает ссылка надо использовать опцию -L:
stat -L /etc/passwdlink
Утилите можно передать не один файл, а несколько:
stat /etc/passwd /etc/group
И тут уже понадобиться возможность настройки формата вывода. Для форматирования вывода можно использовать такие последовательности символов:
- %A — права доступа;
- %b — количество занятых блоков;
- %F — тип файла;
- %g — идентификатор группы файла;
- %G — имя группы файла;
- %i — идентификатор Inode;
- %n — имя файла;
- %s — размер файла;
- %u — идентификатор владельца файла;
- %U — имя владельца файла;
- %x — время последнего доступа;
- %y — время последней модификации контента;
- %z — время последнего изменения контента или атрибутов.
Это далеко не все возможные последовательности, больше вы моете найти в справке по утилите:
Например, давайте выведем только имя, файла, и время последней модификации его содержимоего:
stat —printf «File %n has been modified %y\n» /etc/passwd /etc/group
Если вы хотите посмотреть информацию о файловой системе, в которой расположен файл, то надо использовать опцию -f:
stat -f /etc/passwd
Давайте рассмотрим что означают поля, которые выводит утилита:
- Файл (File) — имя файла;
- Тип (Type) — тип файловой системы;
- ID — идентификатор файловой системы;
- Длина имени (Namelen) — максимальная длина имени в файловой системе;
- Размер блока (Block size) — объем данных при запросе на чтение или запись для оптимальной скорости работы;
- Базисный размер блока (Fundamental block size) — физический размер блока в файловой системе.
Дальше идут общее количество блоков в системе и количество свободных блоков.
Выводы
Из этой небольшой статьи вы узнали что из себя представляет команда stat Linux. Как видите, это очень полезная команда, позволяющая смотреть низкоуровневую информацию о файлах и файловой системе.
Источник