htop linux что это

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

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

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

Установка, запуск, знакомство с интерфейсом

Устанавливается Htop точно так же, как все программы Linux – с помощью графического менеджера приложений либо через терминал.

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Управление утилитой осуществляется с помощью функциональных кнопок верхнего ряда F1-F10 и клавиш-стрелок.

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

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Столбцы PID и USER отображают идентификатор и имя владельца процесса.

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

PRI и NI — текущий приоритет и величину его изменения.

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

VIRT — общий объем используемой процессом памяти, DATA и SWAP — объем памяти, используемый процессом в ходе выполнения и объем памяти, перемещенный в файл подкачки. Столбец TIME+ показывает общее время работы процесса, а Command — команду, которой он был запущен.

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

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

А на этом пока всё.

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

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Источник

🐹 CentOS 7: Монитор процессов. Утилита htop.

Опубликовано 2019-12-17 · Обновлено 2021-01-30

Содержание:

1. Описание программы.

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

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

1.1. Назначение программы.

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

htop также используется как system monitor.

1.2. Возможности.

htop по умолчанию сортирует список процессов по величине, позволяющей оценить продолжительность времени выполнения процесса на ЦПУ (клавиша P) («CPU%»). Также сортировка возможна по размеру занятой процессом памяти (клавиша M) («MEM%»), по времени выполнения процесса в пространстве ядра и пространстве пользователя (клавиша T) («TIME+») и по любому отображаемому параметру процесса (клавиши ).

В отличие от утилиты top, htop:

Также htop:

1.3. Значения цветов.

Индикатор «CPU»

Цвет
по умолчанию
Время ЦПУ тратится на выполнение …
Синийlow… потоков пользователя, у которых приоритет nice больше 0 (низкие приоритеты)
Зелёныйnormal… потоков пользователя, у которых приоритет nice меньше или равен 0 (нормальный и высокие приоритеты)
Красныйkernel… потоков ядра ОС
Жёлтыйirq… обработчиков аппаратных прерываний
Маджентаsoft-irq… обработчиков программных прерываний
Сине-зелёныйsteal и guest… виртуальных машин
Чёрныйio-wait… ожидания завершения операций ввода-вывода

1.4. Столбцы.

PID — идентификатор процесса.

USER — владелец процесса.

PRI — текущий приоритет (влияет на процессорное время, отводимое процессу, значение по умолчанию — 20; чем меньше приоритет, тем больше времени отводится процессу, следовательно он выполняется быстрее).

NI — величина изменения приоритета относительно значения PRI (клавиши F7, F8).

VIRT — общий объем виртуальной памяти, используемой процессом. Включает в себя: область кода (CODE), данные (DATA), разделяемые библиотеки (SHARED) и страницы, перемещенные в swap-область памяти. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, данный столбец всё равно будет показывать цифру 100.

RES — количество резидентной (не перемещаемой в swap) памяти в килобайтах. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, то данный столбец покажет 5. Но здесь есть два ньюанса:

а) RES не показывает сколько данных было перемещено в swap,
б) часть RES-памяти может быть разделяемой.

SHR — количество разделяемой (shared) памяти программы в килобайтах, то есть памяти, которая может быть использована другими приложениями.

S — состояние процесса:
S — так называемое состояние сна;
R — состояние выполнения;
D — состояние ожидания.

CPU% — использование процессора в процентном отношении.

MEM% — использование процессом памяти в процентном отношении.

TIME+ — время работы процесса.

Command — указывает на команду, которой был запущен процесс.

Через настройки (F2) можно добавить еще некоторые полезные параметры:

Также на экран выводятся следующие параметры:

Load average — отражает число блокирующих процессов в очереди на исполнение в определенный временной интервал, а именно 1 минута, 5 минут и 15 минут, соответственно. Блокирующий процесс — это процесс, который ожидает ресурсов для продолжения работы.

Uptime — время работы системы.

2. Управление программой.

3. Установка программы.

Для установки программы из репозитория выполните команду:

4. Использование программы.

Для запуска программы выполните команду:

Источник

Инструкция по использованию команды htop для интерактивного просмотра процессов в Linux

Лучше htop или top?

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

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

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

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

Как установить htop

Установите пакет с именем htop используя менеджер пакетов для вашего дистрибутива.

В Debian, Linux Mint, Ubuntu, Kali Linux и их производных выполните:

В Arch Linux, Manjaro, BlackArch и их производных выполните:

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

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

Так и с привилегиями суперпользователя, для этого используйте sudo:

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Права суперпользвоателя нужны только для некоторых действий: для изменения приоритета (nice) процессов, для закрытия процессов других пользователей.

Как и в случае с программой top, окно разделено на два основных раздела:

Область с информацией о системе

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

В самом верху показана нагрузка на каждое ядро центрального процессора (цифры от 1 до 12).

Mem — это общее количество оперативной памяти и используемая память.

Task — обобщённая статистика по процессам

Swp — уровень занятости файла подкачки (если он есть)

Load average — средняя загрузка центрального процессора

Uptime — время работы операционной системы с момента последней загрузки

Теперь перейдём к области с информацией о запущенных процессах.

Значение столбцов htop

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Программа htop выводит следующие столбцы:

USER

Имя пользователя владельца процесса или ID если имя не может быть определено.

Приоритет — внутренний приоритет ядра для процесса, обычно это просто значение nice плюс двадцать. Отличается для процессов имеющих приоритет выполнения real-time.

VIRT

Размер виртуальной памяти процесса (M_SIZE).

Размер резидентного набора (text + data + stack) процесса (т.е. размер используемой физической памяти процесса, M_RESIDENT).

Размер общих страниц процесса (M_SHARE).

STATE, состояние процесса, может быть:

S для спящих (в простое)

R для запущенных

D для сна диска (бесперебойный)

Z для зомби (ожидает родитель считает его статус выхода)

T для отслеживания или приостановки (т. е. от SIGTSTP)

W для подкачки

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

Процент памяти, используемой процессом в данный момент (в зависимости от размера резидентной памяти процесса, см. M_RESIDENT выше).

TIME+

Время, измеренное в часах, указывает на то, сколько процесс провёл в пользовательском и системном времени.

Command

Полная командная строка процесса (то есть имя программы и аргументы).

Как ускорить или замедлить частоту обновления htop

Для установки времени обновления htop используйте опцию -d после которой укажите время обновления в десятой части секунд. Например, чтобы программа обновляла окно каждую 1/10 секунды:

Чтобы программа выводила новые данные раз в 5 секунд:

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

Для вывода процессов в виде дерева используйте опцию -t:

Либо во время работы программы нажмите клавишу F5:

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Как перемещаться по списку процессов в htop

Вы можете использовать курсорные клавиши (, , , ) для прокрутки списка процессов.

Также работают клавиши PgUp, PgDn для прокрутки окна.

Кнопка Home перенесёт к началу списка.

Кнопка End прокрутит список до конца.

Как в htop отсортировать по потреблению памяти. Как выбрать поле для сортировки

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

Для переключения к обратному порядку сортировки используйте кнопку I (Shift+i). При повторном нажатии список вновь будет отсортирован в обратном порядке.

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

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

В режиме дерева процессов выберите ветку дерева, которую вы хотите свернуть и нажмите F6.

Поиск и фильтрация процессов в htop

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

При фильтрации на экран будут выводиться только процессы, соответствующие введённой строке.

Для перехода к поиску по процессам нажмите F3 или /. Для переключения между найденными процессами нажимайте F3.

Для фильтрации процессов нажмите F4 или \ начните вводить имя процесса.

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Для очистки фильтра вновь нажмите F4 и затем Esc.

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

Для увеличения приоритета процесса (вычитание из величины nice) нажмите кнопку F7 или ]. Помните, что эту операцию может делать только суперпользователь (вы должны быть root’ом или запустить htop с sudo).

Для уменьшения приоритета процесса (прибавления к величине nice) нажмите кнопку F8 или [.

Как выбрать один или несколько процессов в htop

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

Для снятия выделения со всех процессов нажмите U (Shift+u).

Как закрыть процесс в htop

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

Как показать файлы, которые использует процесс

Если вы хотите увидеть файлы, открытые процессом, то выделите интересующий вас процесс и нажмите кнопку l (маленькая латинская L).

Чтобы эта функция работала, в системе должны быть установлена утилита lsof.

Как изменить внешний вид htop

Для изменения внешнего вида — панели с информацией о системе, выводимых столбцах и прочем, нажмите кнопку F2 или S (Shift+s).

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Там вы увидите следующие вкладки:

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Как указать поле для сортировки при запуске htop

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

Например, для сортировки процессов по столбцу PERCENT_MEM (процент используемой памяти):

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

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

Используйте опцию -u в команде вида:

Например, для вывода процессов только пользователя mial:

Как показать только процесс с определённым номером

Для слежения только за некоторыми процессами используйте опцию -p PID,PID…. Через запятую вы можете перечислить один или более идентификаторов процессов. Только эти процессы будут показаны в окне htop.

Трассировка системных вызовов

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

Для работы этой функции у вас должна быть установлена утилита strace.

Как закрыть htop

Для выхода из программы нажмите F10 или q или Ctrl+c.

Если возможностей htop вам недостаточно, то обратитесь к статье «Как пользоваться командой top для наблюдения за процессами в Linux».

Источник

htop и многое другое на пальцах

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

На протяжении долгого времени я не до конца понимал htop. Я думал, что средняя загрузка [load average] в 1.0 означает, что процессор загружен на 50%, но это не совсем так. Да и потом, почему именно 1.0?

Затем я решил во всём разобраться и написать об этом. Говорят, что лучший способ научиться новому — попытаться это объяснить.

htop на Ubuntu Server 16.04 x64

Ниже скриншот htop, который я буду рассматривать в статье.

htop linux что это. Смотреть фото htop linux что это. Смотреть картинку htop linux что это. Картинка про htop linux что это. Фото htop linux что это

Uptime

Uptime показывает время непрерывной работы системы. Это можно узнать и командой uptime.

Где же программа uptime это берёт? Она считывает информацию из файла /proc/uptime.

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

Как я об этом узнал? Я посмотрел какие файлы открывает uptime при запуске. Для этого, можно воспользоваться утилитой strace.

Будет много вывода, лучше сделать grep для поиска системного вызова open. Но это не совсем сработает, т.к. по умолчанию он выводит в стандартный поток ошибок (stderr). Можно перенаправить stderr в стандартный поток с помощью 2>&1.

Если можно взять это прямо из файла, то зачем нужна утилита uptime? Дело в том, что uptime форматирует вывод в читаемом виде, тогда как секунды в файле удобно использовать при написании собственных скриптов и программ.

Load average

Помимо времени непрерывной работы, uptime показывает и среднюю загрузку системы, они отображены как 3 числа.

А взяты они из файла /proc/loadavg. Если еще раз посмотреть на вывод strace, то можно заметить, что этот файл тоже был открыт.

Первые 3 числа измеряют среднюю загрузку системы за последние 1, 5 и 15 минут. 4-ый параметр это количество активных процессов и их общее число. Последнее число это ID последнего использованного процесса.

Когда запускается процесс, ему присваивается ID. Как правило, они идут в возрастающем порядке, за исключением случаев, когда число исчерпалось и системе приходится начинать отсчёт заново. ID 1 присваивается процессу /sbin/init, который запускается при старте.

Взглянем ещё раз на /proc/loadavg и попробуем запустить команду sleep в фоновом режиме. При запуске в фоновом режиме, можно увидеть ID процесса.

Таким образом, 1/123 означает, что 1 процесс выполняется или готов к выполнению, а всего их 123.

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

Если запустить sleep 30 и открыть htop, то число выполняющихся процессов всё равно будет 1. Это потому, что процесс sleep не выполняется, а «спит», т.е. находится в состоянии покоя, иными словами ждёт определённого события. Выполняющийся или активный процесс, это процесс который на данный момент обрабатывается в процессоре (CPU), либо ждёт своей очереди в процессоре.

Попробуйте запустить cat /dev/urandom > /dev/null, где генерируемые случайные байты записываются в особый файл, считывание из которого невозможно. Тогда вы увидите, что выполняющихся процессов теперь уже 2.

Так, активных процессов ровно 2 (генератор случайных чисел и утилита cat, которая читает файл /proc/loadavg), еще можно заметить что средняя загрузка возросла.

load average это средняя загрузка системы на протяжении определённого периода времени.

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

А средняя загрузка получается просто усреднённое значение за 1, 5 и 15 минут, так?

Оказывается, не всё так просто.

Говоря математическим языком, все три значения усредняют среднюю загрузку за всё время работы системы. Они устаревают экспоненциально, но с разной скоростью. Таким образом, средняя загрузка за 1 минуту это сумма 63% загрузки за последнюю минуту + 37% загрузки с момента запуска без учёта последней минуты. То же соотношение верно и для 5, 15 минут. Поэтому не совсем верно, что средняя загрузка за последнюю минуту включает активность только за последнюю минуту, но бОльшей частью за последнюю минуту.

Вернёмся к генератору случайных чисел.

Хотя это не совсем правильно, но вот как я упростил для понимания показатель средней загрузки.

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

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

Если бы процессоров было 2, то загрузка соответственно была бы 50%, т.к. можно было бы одновременно выполнять 2 процесса. Максимальная средняя загрузка (100% использования CPU) системы с двумя процессорами составляет 2.00.

Количество процессоров в системе можно узнать в левом верхнем углу htop или при помощи nproc.

Процессы

В правом верхнем углу, htop показывает общее количество процессов и сколько из них активны. Но почему там написано задания [Tasks], а не процессы?

Задание это синоним процесса. В ядре Linux процессы это и есть задания. htop использует термин задания, возможно, потому, что это название короче и экономит немного места.
В htop можно увидеть и потоки [threads]. Для переключения этой опции нужно использовать комбинацию Shift+H. Если отображается что то вроде Tasks: 23, 10 thr, то это значит они видимы.

Отображение потоков выполнения ядра [kernel threads] можно включить комбинацией Shift+K, и тогда задания будут выглядеть как Tasks: 23, 40 kthr.

ID процесса / PID

При каждом запуске процесса, ему присваивается идентификатор (ID), сокращенно PID.

Если запускать программу в фоновом режиме (&) из bash, то номер задачи[job] выводится в квадратных скобках, а рядом с ним PID процесса.

Ещё один способ, это использовать переменную $! в bash, которая хранит PID последнего процесса, запущенного в фоне.

ID процесса очень полезна. С помощью него можно узнать подробности процесса и управлять им.

Существует псевдо файловая система procfs, с помощью которой программы могут получить информацию от ядра системы путём чтения файлов. Чаще всего она монтируется в /proc/ и для пользователя выглядит как обычный каталог, который можно смотреть командами, такими как ls и cd.

Вся информация о процессе находится в /proc/ /.
$ ls /proc/12503

Например в /proc/ /cmdline содержится команда при помощи которой процесс запустился.

Эмм. не совсем так. Разделителем тут служит байт \0,

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

В каталоге процесса могут быть и ссылки! Для примера, cwd ссылается на текущий рабочий каталог, а exe на запущенный исполняемый файл.

Дерево процессов

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

Если нажать F5 в htop, то можно увидеть иерархию процессов.

Тот же эффект и от флага f команды ps.

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

Ниже я написал, что происходит, если вы, к примеру, вызовите date из консоли bash.

Я предпочитаю использовать древовидную структуру в htop когда хочется увидеть все потоки.

Владелец процесса

У каждого процесса есть владелец — пользователь. У пользователей, в свою очередь, существуют численные ID.

Можно воспользоваться командой id, чтобы узнать имя этого пользователя.

Как выяснилось, id берёт эту информацию из файлов /etc/passwd и /etc/group.

Это обычные текстовые файлы, в которых ID привязаны к именам пользователей.

passwd? Но где пароли? А они на самом деле в /etc/shadow.

Если вы запустите программу, то она запустится от вашего имени, даже если вы не являетесь её владельцем. Если же вам нужно запустить её как root, то нужно использовать sudo.

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

Да, точно, это можно сделать только с привилегиями root.

Тут мы пытаемся вызвать echo от имени администратора, но при этом пишем в файл /etc/sudoers всё так же от нашего имени.

Как правило, есть 2 выхода из данной ситуации:

Допустим, вы захотели поменять свой пароль. Команда passwd вам в помощь. Она сохранит пароль в файле /etc/shadow, который мы видели выше.

Этот файл доступен для записи только для root:

Как же это возможно, что программа запускаемая от имени пользователя может записывать в защищённый файл?

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

Оказывается, это поведение можно изменить правками разрешения файла. Давайте посмотрим.

Обратите внимание на символ s. Она была добавлена при помощи sudo chmod u+s /usr/bin/passwd. И означает, что исполняемый файл будет всегда запускаться от имени владельца, в данном случае это root.

Так же это можно осуществить и для групп (g+s).

Состояния процесса

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

Возможные значения состояния:

Заметьте, что при запуске ps, он может ещё показывать подсостояния как Ss, R+, Ss+ и т.д.

R — Запущенные или в очереди

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

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

S — Прерываемый сон

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

Для примера можно взять утилиту sleep из coreutils. Он будет находится в состоянии сна определенное количество секунд.

Так это прерываемый сон, как же его можно прервать? С помощью сигнала.

Послать сигнал с помощью htop можно нажав клавишу F9 и выбрав нужный вид сигнала в меню.

Передача сигнала, так же известна как команда kill, потому что это на самом деле системный вызов, который может послать сигнал процессу. Существует одноимённая программа /bin/kill, которая может исполнить системномный вызов из пользовательского окружения и по умолчанию посылает сигнал TERM, который уничтожает процесс, убивает его.

Сигнал это всего лишь число. Числа сложно запомнить, поэтому их назвали именами. Их имена обычно пишут заглавными буквами и могут быть с префиксом SIG.

Часто используемые сигналы, это: INT, KILL, STOP, CONT, HUP.

Попробуем прервать спящий процесс, послав ему сигнал INT, он же SIGINT, просто 2, или сигнал прерывания с терминала.

Этот же сигнал посылается, если нажать комбинацию CTRL+C. bash пошлёт сигнал SIGINT процессу на переднем плане, точно так же, как мы это сделали вручную.

Кстати, в bash команда kill встроена, хотя во многих системах есть программа /bin/kill. Почему? Чтобы можно было «убить» процесс даже если превышен лимит на количество создаваемых процессов.

Следующие команды идентичны:

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

Возможно, вы встречали такое исключение при запуске скриптов на Python:

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

D — непрерываемый сон

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

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

Непрерываемые процессы обычно находятся в ожидании IO после page fault. Процесс не может быть прерван в это время сигналом, потому что не сможет их обработать. Если бы он мог, то снова возник бы page fault и всё бы осталось как есть.

Другими словами, это может случиться, если, например, использовать протокол сетевого доступа NFS и требуется время для чтения/записи с/на него.

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

Попробуем вызвать это состояние.

8.8.8.8 это публичный DNS от Google. Там нет NFS, но это нас не остановит.

Как же узнать, что заставляет процесс оказаться в таком состоянии? strace!

Вызовим strace для команды ps выше.

И тут мы увидим, что системный вызов mount блокирует процесс.

Z — Зомби процесс

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

Устанавливаем компилятор С, GNU C Compiler (GCC).

Скомпилируем и запустим программу

Посмотрим на иерархию процессов

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

Если заменить sleep(20) инструкцией while (true), зомби исчезнет сразу.

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

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

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

T — Остановлен сигналом управления заданиями

Я открыл два терминала и могу посмотреть на свои процессы командой ps u.

Ниже я опущу упоминание процессов -bash и ps.

Теперь в одном из терминалов запустим cat /dev/urandom > /dev/nul. Его состояние будет R+, из чего следует что он активен.

Нажмём CTRL+Z, чтобы остановить процесс.

Сейчас, он в состоянии T. Если нужно продолжить процесс, то можно вызвать fg в первом терминале.

Есть и другой способ останова процессов, для этого нужно послать им сигнал STOP с помощью kill, а для продолжения, соответственно, сигнал CONT.

t — Остановлен отладчиком

Для начала установим отладчик GNU Debugger (gdb)

Запустим программу для прослушивания порта 1234.

Он находится в состоянии сна, потому как ждёт входящих сообщений.

Запустим отладчик и привяжем его к процессу с PID 3905.

Теперь процесс будет прослеживаться [trace] в отладчике и его состояние изменится на t.

Время обработки процесса

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

Как же возможно, что единственный процессор может одновременно выполнять несколько заданий?

Каждый процесс выполняется определённый интервал времени, при котором другие приостановлены, затем выполняется следующий процесс и т.д.

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

Любезность и приоритет процессов

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

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

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

Из того, что я прочёл на StackOverflow и других сайтах, следует что увеличение любезности процесса на 1 ведёт к уступке 10% времени работы процессора.

Приоритет (PRI) же в свою очередь это параметр приоритета в пространстве ядра. Приоритет варьируется от 0 до 139. Приоритеты от 0 до 99 зарезервированы для процессов реального времени, а выше, т.е от 100 до 139, для пользовательских.

Можно изменить любезность процесса, и тогда, возможно, ядро примет это к сведению, но сам приоритет менять нельзя.

Соотношение любезности и приоритета следующее: PR = 20 + NI.
Таким образом область определения PR = 20 + (-20 to +19) лежит в отрезке от 100 до 139.

Можно установить любезность процесса непосредственно перед запуском.

А менять любезность во время выполнения можно с помощью renice.

Память — VIRT/RES/SHR/MEM

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

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

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

VIRT/VSZ — Виртуальный образ

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

Таким образом VIRT это всё, что используется процессом.

Если приложение запрашивает 1 Гб памяти, но использует при этом только 1 Мб, то память VIRT будет отображаться всё равно как 1 Гб. Даже если оно вызовет mmap для файла весом в 1 Гб и никогда им не воспользуется, то VIRT всё равно останется 1 Гб.

В большинстве случаев этот показатель бесполезен.

RES/RSS — Резидентная память

Память RSS [resident set size] это область, которая не выгружена на диск и находится в оперативной памяти.

RES, возможно, лучше отображает реальное использование памяти процессора чем VIRT, но нужно иметь ввиду:

SHR — Разделяемая память

Объём памяти, который может быть совместно использован другими процессами.

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

MEM% — Использование памяти

Процент использования физической памяти. Это RES, делённый на общий объём оперативной памяти.

Если, например, RES составляет 200М и в системе установлено 8 Гб памяти, то MEM% будет 200/8192*100 = 2.4%

Процессы

Я запустил виртуальную машину с Ubuntu Server в Digital Ocean. Какие же процессы запускаются при старте системы? Необходимы ли они?

Ниже приведён анализ процессов, которые запускаются на чистой версии машины с Ubuntu Server 16.04.1 LTS x64 в Digital Ocean.

/sbin/init

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

Да, он самый. Что произойдёт, если его остановить? Ничего.

/lib/systemd/systemd-journald

systemd-journald это системная служба, которая собирает и сохраняет логи. Она создаёт структурированные, проиндексированный журналы на основе информации, полученной с разных источников и управляет ими.

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

Если нужно найти событие, лучше использовать journalctl.

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

Но что такое LVM [Logical Volume Management] (Менеджер логических томов)? Можно считать, что LVM это динамические разделы, что подразумевает создание/изменение/удаление разделов, так называемых «логических томов» из командной строки на лету, без надобности перезагрузки системы.

Звучит так, что нужен он только если пользоваться LVM.

/lib/systemd/udevd

systemd-udevd следит за событиями uevents ядра. Для каждого события, systemd-udevd запускает соответствующую инструкцию на основе правил в udev.

udev это диспетчер устройств ядра Linux. Как преемник devfsd и hotplug, udev в основном работает с устройствами в каталоге /dev.

Я не уверен о его необходимости в виртуальной среде.

/lib/systemd/timesyncd

systemd-timesyncd это системная служба которая синхронизирует локальное время с удалённым сервером NTP.

Посмотрим на открытые порты системы:

Красота! В Ubuntu 14.04 это выглядело так:

atd запускает задания, назначенные в определённое время с помощью at.

В отличии от cron, который исполняет задания с периодичностью, at единовременно выполняет задание в определённое время.

Кстати, я ни разу не использовал его до этого момента.

/usr/lib/snapd/snapd

Snappy Ubuntu Core это новое исполнение Ubuntu с обновлёнными решениями — минимальный образ сервера с теми же библиотеками что и Ubuntu, но приложения предоставляются через более простой механизм.

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

Оказывается, это упрощенный пакет deb, где нужно прикреплять все зависимости. Я никогда не пользовался snappy для установки или создания приложений на серверах.

/usr/bin/dbus-daemon

D-Bus — система межпроцессного взаимодействия, которая позволяет приложениям в операционной системе общаться друг с другом.

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

Интересно, который сейчас час и синхронизируется ли время с NTP?

Упс, возможно, это стоило оставить.

/lib/systemd/systemd-logind

systemd-logind это системная служба, управляющая авторизациями в систему.

cron — демон для запуска заданий по расписанию (Vixie Cron)
-f — не демонизировать процесс.

С помощью cron можно запускать задания с периодичностью.

Но если нет, то перед удалением, его нужно остановить и отключить

Иначе при попытке удаления командой apt remove cron, он попытается установить postfix!

Похоже, что cron нужен сервер почты для рассылки.

Rsyslogd — утилита помогающая вести логи.

Другими словами, это то, что создаёт файлы в /var/log/, такие как /var/log/auth.log для сообщений о попытках аутентификации пользователя через SSH.

Файлы конфигурации тут /etc/rsyslog.d.

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

Командой logger можно сохранить сообщение в /var/log/syslog в фоновых скриптах, таких как автозагрузчики.

Да, но у нас уже есть systemd-journald. Нужен ли ещё и rsyslogd?

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

И всё же? На всякий случай, я его оставлю.

/usr/sbin/acpid

acpid — демон для усовершенствованного интерфейса управления конфигурацией и питанием.

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

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

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

Мне удалось успешно перезагрузить машину при помощи reboot, но после halt, Digital Ocean всё ещё думал, что машина включена и мне пришлось выключить её через веб интерфейс провайдера.

Поэтому, я бы оставил эту службу.

/usr/bin/lxcfs /var/lib/lxcfs/

Lxcfs это своего рода предохраняющая файловая система. В Ubuntu 15.04 она используется по двум причинам: первое, визуализировать некоторые файлы в /proc и второе, ограничить доступ к файловой системе cgroup хоста.

В итоге, можно создавать контейнеры привычным образом с lxc-create и у контейнера будут правильные значения uptime, top, и т.д. Файловая система позволяет контейнеру больше вести себя как отдельная система, нежели без данной файловой системы.

Если не используете контейнеры LXC, то можно удалить с помощью

/usr/lib/accountservice/accounts-daemon

AccountsService предоставляет интерфейсы D-Bus для манипуляций с учётными данными пользователей. Использование интерфейсов реализовано в командах usermod(8), useradd(8) и userdel(8).

Когда я удалил D-Bus, это сломало timedatectl. Мне интересно, что сломается, когда я удалю эту службу.

/sbin/mdadm

mdadm это утилита Linux для администрирования и мониторинга программных RAID устройств.

RAID — технология виртуализации данных, которая объединяет несколько дисков в один логический элемент. У RAID есть 2 основные задачи: 1) увеличения объёма логического диска: RAID 0. Если объединить 2 диска по 500 Гб, то получится 1 Тб. 2) Избежать потерю данных если один из дисков откажет: например, RAID 1, RAID 5, RAID 6, и RAID 10.

Можно удалить с помощью:

polkit это фреймворк авторизации. Я так понимаю, что это своего рода sudo и он позволяет непривилегированным пользователям выполнять определённые команды от имени администратора, например, перезагружать систему.

Но у меня сервер. Можно удалить с помощью

Мне до сих пор интересно, что из-за него сломается.

sshd (OpenSSH Daemon) демон для ssh. С -D он не будет переведен в режим работы демона. Это позволит легче осуществлять мониторинг sshd.

/sbin/iscsid

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

Я никогда не слышал о iSCSI:

iSCSI — протокол, который базируется на TCP/IP и разработан для установления взаимодействия и управления системами хранения данных, серверами и клиентами.

agetty — Linux альтернатива getty.

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

Это позволяет войти в систему при физическом доступе к нему. В Digital Ocean, например, можно открыть консоль из браузера и подключиться к этому терминалу (кажется через VNC).

Раньше, можно было наблюдать как несколько терминалов стартовали систему (настроенных в /etc/inittab), но сейчас всё делает systemd.

Ради эксперимента, я удалил файл конфигурации, который запускает и создаёт agetty:

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

sshd: root@pts/0 означает, что была установлена SSH сессия для пользователя root в псевдотерминале (pts) №0.

bash это командная оболочка, которую я использую. Но почему перед bash стоит дефис? Пользователь Reddit под ником hirnbrot объяснил:

htop — интерактивная программа для просмотра процессов, которая изображена на скриншоте.

После

Крайняя степень:

Я так же попробовал установить программное обеспечение по своей инструкции об автоматической установке WordPress на Ubuntu Server и всё работало.

Тут nginx, PHP7 и MySQL.

За кадром

Исходный код

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

Сперва, надо найти где начать искать.

Тут видно, что uptime находится в /usr/bin/uptime и что в Ubuntu это часть пакета procps.

Затем, можно зайти на packages.ubuntu.com и найти этот пакет.

Внизу есть ссылки на репозитории с исходными кодами:

Дескрипторы файлов и перенаправление

Если нужно перенаправить стандартный поток ошибок (stderr) в стандартный выходной поток, нужно это делать с 2&>1 или 2>&1?

Можно запомнить положение амперсанда пониманием того, что echo нечто > файл запишет нечто в файл файл. Это тоже самое, что echo нечто 1> файл. А вот echo нечто 2> файл запишет поток ошибок в файл.

Если написать echo нечто 2> 1, то поток ошибок перенаправится в файл, с именем 1.

Если поставить перед 1 амперсанд &, то это будет означать, что 1 это не имя файла, а идентификатор потока. Поэтому правильно echo нечто 2>&1.

Цвета в PuTTY

Если некоторые элементы сверху не отображаются при использовании PuTTY, то можно это исправить так.

Командная оболочка на C

Попробуем написать очень простую командную оболочку на C, которая бы использовала системные вызовы fork/exec/wait. Программа shell.c:

Вы когда нибудь интересовались почему при запуске программы в фоновом режиме вы видите, что она завершила свою работу, только после нажатия Enter?

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

Источник

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

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