pid sid что такое
Что означают идентификаторы PID, PPID, SID, PGID, UID, EUID?
Напишите программу на C, которая печатает следующие идентификаторы PID, PPID, SID, PGID, UID, EUID.
Затем задание перешло к вопросу
Что представляет каждый идентификатор?
Я завершил программу, но не нашел адекватных объяснений для идентификаторов.
1 ответ
Ознакомьтесь с этой публикацией SO и первый ответ для здорового объяснения того, для чего они.
3.270 ID родительского процесса
3.343 сессия
Набор групп процессов, созданных для контроля работы. Каждая группа процессов является членом сеанса. Процесс считается участником сеанса, членом которого является его группа процессов. Недавно созданный процесс присоединяется к сеансу его создателя. Процесс может изменить свое членство в сеансе; см. setsid (). В одном сеансе может быть несколько групп процессов.
3.296 Группа процессов
Коллекция процессов, которая разрешает сигнализацию связанных процессов. Каждый процесс в системе является членом группы процессов, которая идентифицируется идентификатором группы процессов. Недавно созданный процесс присоединяется к группе процессов его создателя.
3.297 идентификатор группы процессов
Уникальный положительный целочисленный идентификатор, представляющий группу процессов в течение ее времени жизни.
3.142 Эффективный идентификатор пользователя
Атрибут процесса, который используется при определении различных разрешений, включая права доступа к файлам; см. также идентификатор пользователя.
Русские Блоги
(3) Различные идентификаторы процессов: pid, pgid, sid, глобальный pid, локальный pid
Операционная система: Linux
Процессор: arm
Версия ядра: 4.x
Процессы, как системные ресурсы, имеют различные логотипы и являются сложными. Ниже приводится простое объяснение.
1. Начиная с Linux
Только системный вызов gettid вернет pid процесса:
Видно, что при передаче типа __PIDTYPE_TGID в конце возвращается pid его group_leader.
Процессы могут быть организованы в группы процессов (системный вызов setpgrp). Группы процессов могут упростить процесс отправки сигналов всем процессам в группе. Идентификатор группы процессов называется PGID. Все процессы в группе процессов имеют одинаковый PGID, который равен PID лидера группы.
Несколько групп процессов могут быть объединены в группу диалога (с помощью системного вызова setsid), которая может использоваться для программирования терминала. Все процессы в группе разговоров имеют одинаковый SID.
2. Другое
TID это PID на Linux! PID возвращается при выполнении вызова gettid.
Пид родительского процесса.
Командное пространство 3.pid
В настоящее время в ядре Linux поддерживаются следующие пространства имен:
имя | Макроопределение | Карантинный контент |
---|---|---|
Cgroup | CLONE_NEWCGROUP | Cgroup root directory (since Linux 4.6) |
IPC | CLONE_NEWIPC | System V IPC, POSIX message queues (since Linux 2.6.19) |
Network | CLONE_NEWNET | Network devices, stacks, ports, etc. (since Linux 2.6.24) |
Mount | CLONE_NEWNS | Mount points (since Linux 2.4.19) |
PID | CLONE_NEWPID | Process IDs (since Linux 2.6.24) |
User | CLONE_NEWUSER | User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8) |
UTS | CLONE_NEWUTS | Hostname and NIS domain name (since Linux 2.6.19) |
Просмотрите пространство имен, к которому принадлежит процесс:
API, связанный с пространством имен:
Введите пространство имен pid
давным-давно, когда ядро не поддерживает пространство имен pid_name, pid и tgid напрямую хранятся в task_struct.
Пространства имен PID позволяют повторять идентификаторы процессов в разных пространствах имен pid, не влияя друг на друга, и могут быть вложенными. Все новые пространства имен, созданные в текущем пространстве имен, являются дочерними пространствами текущего пространства имен.В родительском пространстве имен можно видеть информацию о процессе во всех дочерних пространствах имен, в то время как дочернее пространство имен не может видеть информацию о процессе в пространстве имен предка или брата.
В настоящее время пространство имен PID может быть вложено до 32 уровней, что определяется макросом MAX_PID_NS_LEVEL в ядре.
Для поддержки pid_namespace ядро добавляет структуры pid и upid. Задачи в структуре pid являются заголовком связанного списка, указывая на узел pid_link в task_struct, который можно использовать для объединения воедино групповых задач процесса и сеансовых задач процесса.
Как найти task_struct по nr в упиде?
Если есть upid высокого уровня, дополнительный upid будет организован после структуры pid за один раз. В соответствии с переменной уровня пространства имен pid_name, в котором находится upid, структуру pid можно найти, используя номер pid в макросе upid и container_of, тем самым найдя task_struct. Процесс заключается в следующем.
Глобальный пид, местный пид
таблица pid_hash
Хеш-таблица хранит данные в структуре с индексированием по ключу (key-indexed). Введите значение для поиска, то есть ключ, чтобы найти соответствующее значение. С помощью хеш-функции введите pid, чтобы найти соответствующую позицию в хеш-таблице. Если позиция в хеш-таблице совпадает, вы можете связать их вместе. Регулируя алгоритм хеш-функции и размер хеш-таблицы, вы можете найти баланс во времени и пространстве.
Здесь используется хеш-функция pid_hashfn, которая сохраняет заголовок списка в pid_hash, указывая на pid_chain в upid. Для разных уровней, но upid с одинаковым номером pid может быть связан с одной и той же строкой pid_chain, поэтому в случае поиска структуры pid по номеру pid необходимо указать пространство имен.
Pid sid что такое
В телевещании программой (program) или сервисом (service) называется набор логически связанных элементарных потоков данных: аудио-, видео-, телетекст, субтитры, а также дополнительная информация типа расписания передач, названия программы, названия вещателя (провайдера), языков аудиосопровождения, данные для условного доступа к программам и т.п.
Видеопоток в телепрограмме обычно один, реже несколько (например, при трансляции спортивных состязаний с нескольких камер). Если в программе нет ни одного видеопотока, то получается радиопрограмма.
Хотя бы один аудиопоток в программе обычно есть, иногда их бывает несколько, например, на разных языках или, скажем, стерео и многоканальный звук в фильмах. Ни одного аудиопотока в программе бывает редко, хотя теоретически и такой вариант возможен.
Аудио- и видеопотоки (для MPEG2) состоят из PES-пакетов, порезанных на кусочки по 184 байта и разложенных по TS-пакетам.
Таблица состоит из одной или более секций (section). Каждая секция содержит 8-битовый идентификатор таблицы, определяющий её тип, порядковый номер секции и общее количество секций в таблице. Поскольку таблицы могут быть довольно большими, а TS-пакеты могут во время передачи искажаться, такая схема позволяет приёмнику быстрее собрать полную таблицу, дождавшись повторной передачи только нужной секции, а не всей таблицы целиком. [Здесь и далее под словом «приёмник» подразумевается не столько железо, сколько программа, которая управляет его работой]. Для обнаружения искажений при передаче секции снабжаются контрольными суммами (CRC32).
Идентификаторы некоторых таблиц определены в стандартах ISO 13818 и EN 300 468:
Чтобы приёмник, настроившийся на транспондер в произвольный момент времени, смог получить служебные таблицы, они с некоторой периодичностью повторяются в потоке, обычно от нескольких раз в секунду до одного раза в несколько секунд.
Содержимое таблиц может время от времени меняться. Чтобы приёмник мог распознать изменения, предусмотрено две возможности. Во-первых, в таблицах может присутствовать флаг «current/next indicator», указывающий, относится ли таблица к настоящему или к следующему периоду, и позволяющий одновременно передавать две разные версии одной таблицы. Имея данные о следующем периоде, приёмник может заранее произвести некоторые подготовительные действия.
Кроме того, в таблицах есть 5-битовый номер версии, который последовательно увеличивается всякий раз, когда данные в таблице изменяются. По достижении максимального значения номер версии сбрасывается в 0 и далее опять увеличивается. Обнаружив изменение номера версии, приёмник может предпринять какие-нибудь действия, например, автоматически показать пользователю название очередной передачи, или перечитать список каналов транспондера.
Кроме аудио, видео и служебных данных, элементарные потоки могут использоваться для передачи IP-пакетов, данных от интерактивных сервисов и прочего.
Чтобы данные от разных элементарных потоков при мультиплексировании не перепутались, каждому элементарному потоку присваивается уникальный (в пределах мультиплексированного потока) номер, который называется PID (packet identifier). Этот номер указывается в заголовках всех пакетов, относящихся к данному элементарному потоку. По значению этого поля демультиплексор в приёмнике и выделяет нужные элементарные потоки.
PID имеет длину 13 бит и может принимать значения от 0x0000 до 0x1FFF.
Значение 0x1FFF никогда не присваивается никакому реальному потоку и используется, когда в служебных таблицах требуется указать PID потока, а реально поток не существует (что-то типа NULL).
Набор таблиц, необходимый и достаточный для демультиплексирования и показа программ, называется PSI (program specific information). К нему относятся следующие таблицы:
В PAT (program association table), которая всегда передаётся с PID’ом 0x0000, находится список программ в виде номеров программ и номеров их PMT (program map tables). Считав PMT от каждой программы, приёмник получает номера PID’ов, с которыми передаются собственно аудио-, видео- и потоки данных условного доступа к этой программе.
Обычно для выбора и показа программы этих данных достаточно.
Кроме ссылок на PMT, в PAT присутствует также ссылка на NIT (network information table). В NIT описываются параметры транспондеров (частота, модуляция, ширина полосы, и т.п.) и передающихся с них мультиплексированных потоков (номер, идентификатор сети, номера и типы программ и пр.) Это позволяет приёмнику, настроившись хотя бы на один транспондер, автоматически узнать параметры других. Очевидно, для выборки данных о программах и их показа NIT не нужна. Тем не менее, по стандарту она включена в состав PSI.
Кроме вышеперечисленных, существуют и другие таблицы, формально не включены в состав PSI, но позволяют получить дополнительные данные о программах для автоматической группировки и более удобного выбора пользователем. В частности, интерес представляет SDT (service description table, PID=0x0011, table_id=0x42 для текущего потока и 0x46 для других потоков), в которой содержатся названия программ. Без содержащихся в этой таблице данных программы пришлось бы обозначать исключительно числовыми идентификаторами или редактировать названия вручную, что не слишком удобно для пользователя.
Дальнейшие примеры с комментариями помогут несколько прояснить эту запутанную картину.
Смена SID при клонировании и массовом развёртывании
Привет, Хабр! Упомянутая в заголовке тема всё ещё порождает множественные дискуссии и недопонимание между системными администраторами. В своей статье я постараюсь ответить на следующие вопросы:
В основу рассуждений была взята популярная статья Марка Руссиновича (доступна также на русском языке), которую довольно часто неправильно интерпретируют (судя по комментариям и «статьям-ответам»), что приводит к неприятным последствиям. Добро пожаловать под кат.
Что такое SID, его типы и чем отличается Machine SID от Domain SID?
В первую очередь, важно различать SID компьютера (Machine SID) и SID домена (Domain SID), которые являются независимыми и используются в разных операциях.
Machine SID и Domain SID состоят из базового SID’а (base SID) и относительного SID’а (Relative SID = RID), который «приклеивается» в конец к базовому. Базовый SID можно рассматривать как сущность, в рамках которой можно определить группы и аккаунты. Машина (компьютер) является сущностью, в рамках которой определяются локальные группы и аккаунты. Каждой машине присваивается machine SID, и SID’ы всех локальных групп и аккаунтов включают в себя этот Machine SID с добавлением RID в конце. Для примера:
Machine SID для машины с именем DEMOSYSTEM | S-1-5-21-3419697060-3810377854-678604692 |
DEMOSYSTEM\Administrator | S-1-5-21-3419697060-3810377854-678604692-500 |
DEMOSYSTEM\Guest | S-1-5-21-3419697060-3810377854-678604692-501 |
DEMOSYSTEM\CustomAccount1 | S-1-5-21-3419697060-3810377854-678604692-1000 |
DEMOSYSTEM\CustomAccount2 | S-1-5-21-3419697060-3810377854-678604692-1001 |
Именно SID’ы (а не имена) хранятся в токенах доступа (access tokens) и дескрипторах безопасности (security descriptors), и именно SID’ы используются при проверке возможности доступа к объектам системы Windows (в том числе, например, к файлам).
На машине вне домена используются локальные SID’ы, описанные выше. Соответственно, при соединении с машиной удалённо используется локальная аутентификация, поэтому даже имея 2 или более машин с одинаковым machine SID в одной сети вне домена, проблем с логином и работой внутри системы не будет, т.к. SID’ы в операциях удалённой аутентификации попросту не используются. Единственный случай, в котором возможны проблемы, это полное совпадение имени пользователя и пароля на двух машинах – тогда, например, RDP между ними может глючить.
Когда машина добавляется в домен, в игру вступает новый SID, который генерируется на этапе добавления. Machine SID никуда не девается, так же как и локальные группы, и пользователи. Этот новый SID используется для представления аккаунта машины в рамках домена. Для примера:
Domain SID для домена BIGDOMAIN | S-1-5-21-124525095-708259637-1543119021 |
BIGDOMAIN\DEMOSYSTEM$ (аккаунт машины (computer account)) | S-1-5-21-124525095-708259637-1543119021-937822 |
BIGDOMAIN\JOHNSMITH (аккаунт пользователя (user account)) | S-1-5-21-124525095-708259637-1543119021-20937 |
Таким образом, машина DEMOSYSTEM теперь имеет два независимых SID’а:
• Machine SID, определяющая машину как сущность, в рамках которой заданы группы и аккаунты (первая строчка в первой таблице).
• SID аккаунта машины (computer account SID) в рамках домена BIGDOMAIN (вторая строчка во второй таблице).
Основная суть в том, что SID’ы должны быть уникальны в пределах окружения (authority), к которому они применимы. Другими словами, если машине DEMOSYSTEM присвоен machine SID S-1-5-21-3419697060-3810377854-678604692-1000, то неважно, что у другой машины в той же сети будет идентичный machine SID, т.к. этот SID используется только локально (в пределах машины DEMOSYSTEM). Но в пределах домена BIGDOMAIN computer SID у обоих машин должен быть уникальным для корректной работы в этом домене.
Смена SID при клонировании или развёртывании
В применении к продукту Acronis Snap Deploy 5 (основное предназначение — массовое развёртывание систем из мастер-образа), в котором функциональность смены SID-а присутствовала с самой первой версии, это означает, что мы, как и многие пользователи, ошибочно пошли на поводу у устоявшегося мнения, что менять SID нужно.
Однако исходя из вышесказанного, ничего страшного в развёртывании (или клонировании) машины без изменения Machine SID вовсе нет, в случае если это развёртывание происходит до добавления машины в домен. В противном случае — возникнут проблемы.
Из этого правила есть одно исключение: нельзя клонировать машину, если в дальнейшем роль этого клона планируется повышать (promote) до уровня домена контроллера. В этом случае Machine SID домен контроллера будет совпадать с computer SID в созданном домене, что вызовет проблемы при попытке добавления оригинальной машины (из которой производилось клонирование) в этот домен. Это, очевидно, относится только к серверному семейству Windows.
Проблемы, связанные со сменой SID
Пересмотреть точку зрения на функциональность смены SID нас подтолкнул выпуск новой версии Windows. При первом тестовом развёртывании образа Windows 10 со сменой SID на получившейся машине обнаружилось, что кнопка Start перестала нажиматься (и это оказалось только вершиной «айсберга»). Если же развёртывать тот же образ без смены SID, то такой проблемы не возникает.
Основная причина в том, что эта опция вносит изменения практически во всю файловую систему развёртываемой машины. Изменения вносятся в реестр Windows, в разрешения NTFS (NTFS permissions) для каждого файла, в SID’ы локальных пользователей (так как SID пользователя включает в себя в том числе и machine SID; подробнее тут) и т.д.
В случае с Windows 10 большая часть ключей реестра не могла быть модифицирована («Error code = C0000005. Access violation» и другие ошибки) и, как следствие, наша функция смены SID’а отрабатывала не до конца, что и приводило к трагической гибели практически нерабочей копии Windows 10.
Было принято решение убрать эту опцию в случае, если в мастер-образе мы находим Windows 10 (или Windows Server 2016). Решение было принято на основе теоретических выкладок описанных выше плюс, естественно, было подтверждено практикой при тестировании недавно вышедшего обновления Acronis Snap Deploy 5 во множестве комбинаций: с и без переименования машин после развёртывания, с добавлением в домен и рабочую группу, развёртывание из мастер-образов снятых от разных состояний мастер-машины (она была добавлена в домен или рабочую группу в разных тестах) и т.д.
Использование Sysprep
Начиная с Windows NT клонирование (развертывание) ОСи с использованием только NewSID никогда не рекомендовалось самим Microsoft. Вместо этого рекомендуется использовать родную утилиту Sysprep (см. KB314828), которая, помимо смены SID’а, также вносит большое число других изменений, и с каждой новой версией Windows их становится только больше. Вот небольшой (неполный) список основных вносимых изменений:
Таким образом, клонирование/развертывание без использования Sysprep может повлиять (читай «скорее всего, сломает») на функциональность Windows Update, Network Load Balancing, MSDTC, Vista и выше Key Manager Activation (KMS), который завязан на CMID (не путать с Machine SID), также изменяемый Sysprep’ом, и т.д.
Итого
Повторяя TL;DR из начала статьи, основной вывод можно сделать такой: для подготовки образа машины к клонированию/развёртыванию следует использовать sysprep в подавляющем большинстве случаев.
Изучаем процессы в Linux. Управление процессами
Обновл. 12 Июл 2021 |
Процесс — это экземпляр запущенной программы. Всякий раз, когда в терминале выполняется какая-нибудь команда (например, команда pwd ), система создает/запускает новый процесс.
Типы процессов
В Linux существует три основных типа процессов:
Процессы переднего плана (или «интерактивные процессы») — они инициализируются и управляются с помощью терминального сеанса. Другими словами, необходимым условием для запуска таких процессов является наличие пользователя, подключенного к системе; они не запускаются автоматически как часть системных функций/служб. Когда команда/процесс выполняется на переднем плане, то они полностью занимают запустивший их терминал. Вы не сможете использовать другие команды, т.к. приглашение оболочки будет недоступно, пока данный процесс выполняется на переднем плане.
Фоновые процессы (или «автоматические процессы») — это процессы, не подключенные к терминалу; они не ожидают пользовательского ввода данных. Таким образом, другие процессы могут выполняться параллельно с процессом, запущенным в фоновом режиме, поскольку им не нужно ждать его завершения.
Демоны (англ. «daemons») — это особый тип фоновых процессов, которые запускаются при старте системы и продолжают работать в виде службы; они не умирают. Такие процессы запускаются как системные задачи (службы). Однако при этом они могут управляться пользователем через init-процесс (о котором мы поговорим чуть позже). Например, к демонам относится служба электронных сообщений sendmail и sshd — служба, принимающая от клиентов запросы на соединения по протоколу ssh. За исключением процесса init и некоторых других, процессы демонов обычно имеют окончание d в своем имени.
Как Linux идентифицирует процессы?
Поскольку Linux является многопользовательской системой, разные пользователи могут запускать различные программы, при этом каждый запущенный экземпляр программы должен быть однозначно идентифицирован ядром.
Процессы запущенной программы имеют уникальный пятизначный номер — PID (сокр. от «Process IDentificator» — «идентификатор процесса»), а также PPID (сокр. от «Parent Process IDentificator» — «идентификатор родительского процесса»). В связи с этим процессы дополнительно разделяют на две группы:
Родительские процессы — это процессы, которые во время своего выполнения создают другие процессы.
Дочерние процессы — эти процессы, создаваемые другими процессами во время своего выполнения.
Прародителем всех процессов в системе является процесс init (от англ. «initialization») — первая программа, которая выполняется при загрузке Linux и управляет всеми другими процессами в системе. init запускается самим ядром и всегда имеет PID = 1, поэтому у него в принципе нет родительского процесса.
Примечание: В любой момент времени в системе не существует двух процессов с одинаковым PID. Вновь создаваемому процессу может быть назначен ранее использованный свободный PID.
Состояния процесса в Linux
Когда процесс передает ядру запрос, который не может быть исполнен сразу же, то процесс «погружается в сон/ожидание» и «пробуждается», когда запрос может быть удовлетворен. В связи с этим, в зависимости от текущей ситуации, процесс, во время своего выполнения, может переходить из одного состояния в другое:
Рассмотрим основные состояния процесса:
Выполнение — процесс либо запущен (текущий процесс в системе), либо готов к запуску (ожидает передачи на выполнение процессору).
Ожидание — процесс ожидает наступления некоторого события (пользовательского ввода, сигнала от другого процесса и т.п.) или выделения системных ресурсов. Кроме того, ядро также различает два типа ожидающих процессов:
прерываемые ожидающие процессы — могут быть прерваны сигналами;
непрерываемые ожидающие процессы — процессы ожидают непосредственно на аппаратном уровне и не могут быть прерваны каким-либо событием/сигналом.
Завершен — процесс был остановлен, как правило, путем получения сигнала штатного завершения работы exit().
Зомби — иногда, когда родительский процесс убивается до завершения дочернего процесса, дочерние процессы становятся «осиротевшими», при этом в качестве нового родителя (с соответствующим изменением PPID) им назначается процесс init. Убитые процессы, но при этом все еще отображающиеся в таблице процессов, называются процессами зомби (они мертвы и не используются).
Как получить идентификатор (PID) процесса
Для отображения идентификатора нужного вам процесса можно использовать команду pidof, например:
$ pidof init
$ pidof bash
$ pidof systemd
Чтобы вывести PID и PPID текущей оболочки, выполните:
Запуск интерактивного процесса в Linux
Как только вы выполните какую-нибудь команду или программу (например, firefox ), она создаст в системе соответствующий процесс. Вы можете запустить процесс переднего плана (он будет подключен к терминалу, ожидая пользовательского ввода) следующим образом:
Запуск фонового процесса в Linux
Запуск процесса в фоновом режиме полезен только для программ, которые не нуждаются в пользовательском вводе (через оболочку). Перевод задания в фоновый режим обычно выполняется, когда ожидается, что выполнение задания займет много времени.
Кроме этого, в оболочку встроена утилита управления заданиями jobs, которая позволяет легко управлять несколькими процессами, переключая их между передним планом и фоновым исполнением. Также, с помощью jobs процессы могут быть сразу запущены в фоновом режиме.
Чтобы запустить процесс в фоновом режиме, используйте символ & после имени запускаемой программы. В этом случае процесс не будет принимать пользовательский ввод, пока не переместится на передний план:
$ firefox #После Enter нажмите Ctrl+Z
$ jobs
Чтобы продолжить выполнение вышеупомянутой приостановленной команды в фоновом режиме, используйте команду bg (от англ. «begin»):
Чтобы отправить фоновый процесс на передний план, используйте команду fg (от англ. «foreground») вместе с идентификатором задания следующим образом:
Отслеживание активных процессов
Существует несколько различных инструментов для просмотра/перечисления запущенных в системе процессов. Двумя традиционными и хорошо известными из них являются команды ps и top:
Команда ps
Отображает информацию об активных процессах в системе, как показано на следующем скриншоте:
UID — идентификатор пользователя, которому принадлежит процесс (тот, от чьего имени происходит выполнение).
PID — идентификатор процесса.
PPID — идентификатор родительского процесса.
C — загрузка CPU процессом.
STIME — время начала выполнения процесса.
TTY — тип терминала, связанного с процессом.
TIME — количество процессорного времени, потраченного на выполнение процесса.
CMD — команда, запустившая этот процесс.
Есть и другие опции, которые можно использовать вместе с командой ps :
-a — показывает информацию о процессах по всем пользователям;
-x — показывает информацию о процессах без терминалов;
-u — показывает дополнительную информацию о процессе по заданному UID или имени пользователя;
-e — отображение расширенной информации.
Если вы хотите вывести вообще всю информацию по всем процессам системы, то используйте команду ps –aux :
Обратите внимание на выделенный заголовок. Команда ps поддерживает функцию сортировки процессов по соответствующим столбцам. Например, чтобы отсортировать список процессов по потреблению ресурсов процессора (в порядке возрастания), введите команду:
Если вы ходите выполнить сортировку по потреблению памяти (в порядке убывания), то добавьте к имени интересующего столбца знак минуса:
Еще один очень популярный пример использования команды ps — это объединение её и команды grep для поиска заданного процесса по его имени:
Команда top
Команда top отображает информацию о запущенных процессах в режиме реального времени:
PID — идентификатор процесса.
USER — пользователь, которому принадлежит процесс.
PR — приоритет процесса на уровне ядра.
VIRT — общий объем (в килобайтах) виртуальной памяти (физическая память самого процесса; загруженные с диска файлы библиотек; память, совместно используемая с другими процессами и т.п.), используемой задачей в данный момент.
RES — текущий объем (в килобайтах) физической памяти процесса.
SHR — объем совместно используемой с другими процессами памяти.
S (сокр. от «STATUS») — состояние процесса:
S (сокр. от «Sleeping») — прерываемое ожидание. Процесс ждет наступления события.
I (сокр. от «Idle») — процесс бездействует.
R (сокр. от «Running») — процесс выполняется (или поставлен в очередь на выполнение).
Z (сокр. от «Zombie») — зомби-процесс.
%CPU — процент используемых ресурсов процессора.
%MEM — процент используемой памяти.
TIME+ — количество процессорного времени, потраченного на выполнение процесса.
COMMAND — имя процесса (команды).
Также в сочетании с основными символами состояния процесса (S от «STATUS») вы можете встретить и дополнительные:
— процесс с высоким приоритетом;
N — процесс с низким приоритетом;
l — многопоточный процесс;
Примечание: Все процессы объединены в сессии. Процессы, принадлежащие к одной сессии, определяются общим идентификатором сессии — идентификатором процесса, который создал эту сессию. Лидер сессии — это процесс, идентификатор сессии которого совпадает с его идентификаторами процесса и группы процессов.
Команда glances
Команда glances — это относительно новый инструмент мониторинга системы с расширенными функциями:
Примечание: Если в вашей системе отсутствует данная утилита, то установить её можно с помощью следующих команд:
$ sudo apt-get update
$ sudo apt-get install glances
Управление процессами в Linux
Также в Linux присутствуют некоторые команды для управления процессами:
kill — посылает процессу сигнал завершения работы;
pkill — завершает процесс по его имени;
pgrep — ищет процесс по его имени (и, опционально, по имени запустившего его пользователя);
killall — завершает все активные процессы.
Ниже приведены несколько основных примеров их использования:
Отправка сигналов процессам
Основополагающим способом управления процессами в Linux является отправка им соответствующих сигналов. Для перечисления списка всех доступных сигналов, введите команду:
Большинство сигналов предназначены для внутреннего использования системой или для программистов, когда они пишут код. Ниже приведены наиболее полезные сигналы:
SIGHUP (1) — отправляется процессу, когда его управляющий терминал закрыт.
SIGINT (2) — отправляется процессу управляющим терминалом, когда пользователь прерывает процесс нажатием клавиш Ctrl+C.
SIGQUIT (3) — отправляется процессу, если пользователь посылает сигнал выхода Ctrl+D.
SIGKILL (9) — этот сигнал немедленно завершает (убивает) процесс, и процесс не будет выполнять никаких операций очистки за собой.
SIGTERM (15) — сигнал завершения программы (отправляется командой kill по умолчанию).
SIGTSTP (20) — отправляется процессу управляющим терминалом с запросом на остановку; инициируется пользователем нажатием клавиш Ctrl+Z.
Ниже приведены примеры команды kill для уничтожения приложения firefox с помощью PID, после его зависания:
Изменение приоритета процесса
В системе Linux все активные процессы имеют определенный приоритет выполнения, задаваемый так называемым nice-значением. Процессы с более высоким приоритетом обычно получают больше процессорного времени, чем процессы с более низким приоритетом. Однако пользователь с root-правами может повлиять на это с помощью команд nice и renice.
Узнать значение приоритета команды можно по выводу команды top (столбец NI):
Чем больше nice-значение, тем меньшим приоритетом будет обладать процесс. Например, вы можете задать приоритет для запускаемого процесса следующим образом:
Чтобы изменить приоритет уже запущенного процесса, используйте команду renice следующим образом:
$ renice +8 5547
$ renice +8 1151
На данный момент это всё! Если у вас есть какие-либо вопросы или дополнительные идеи, вы можете поделиться ими с нами с помощью комментариев.
Поделиться в социальных сетях: