Программа — исполняемый код и данные, сохранённые в файле. Процесс — живой контекст выполнения: он включает отображённый код, память, учётные данные, открытые файловые дескрипторы, состояние сигналов, сведения планирования и один или несколько потоков. У одной программы может быть много независимых экземпляров процессов.
Процессы · Урок 3
Сведения о процессах
Узнайте, какие состояние и ресурсы отличают работающий процесс от программы, сохранённой на диске.
Экземпляры программ и PID
Например, запустите cat без операндов в двух терминалах. Каждый экземпляр будет ожидать ввод и получит собственный идентификатор процесса:
$ pgrep -a cat
18420 cat
18457 cat
Оба процесса выполняют одну программу, но могут иметь разные входные потоки, содержимое памяти, учётные данные, рабочие каталоги и сроки жизни. PID обозначает один живой процесс в конкретный момент и позднее может использоваться повторно после его завершения.
Что отличает два работающих экземпляра одной программы?
Состояние, отслеживаемое ядром
Ядро хранит сведения, необходимые для планирования и управления каждым процессом, включая:
- идентификаторы процесса и родителя
- пользовательские и групповые учётные данные
- отображения виртуальной памяти
- открытые файловые дескрипторы и текущий каталог
- обработчики и ожидающие сигналы
- политику планирования, приоритет и состояние выполнения
- учётные данные, например время CPU
Некоторые нижележащие ресурсы могут использоваться совместно. Родственные процессы способны совместно отображать память, а потоки одного процесса используют общее адресное пространство и многие ресурсы процесса. Поэтому процесс создаёт границы изоляции, но не означает физическую приватность каждого байта или объекта ядра.
Какой компонент хранит состояние планирования и учётных данных процессов Linux?
Планирование CPU и память
Готовые к выполнению потоки конкурируют за время CPU. Планировщик ядра выбирает, какой поток будет работать на каком CPU, с учётом класса планирования, приоритета, привязки CPU, нагрузки и политики. Это не обещает каждому процессу равную долю.
Каждый процесс обычно видит виртуальное адресное пространство. Ядро и оборудование сопоставляют виртуальные адреса с физической памятью или другим хранилищем, обеспечивают защиту и при необходимости совместно используют страницы. Поэтому показатель памяти в ps или top не обязательно равен объёму уникальной физической RAM, относимой к процессу.
Что выбирает планировщик Linux?
Завершение процесса и освобождение ресурсов
При завершении процесса ядро освобождает большинство его личных ресурсов, закрывает оставшиеся дескрипторы и записывает сведения о завершении для родителя. Небольшая запись таблицы процессов может оставаться зомби, пока родитель не получит код завершения. Поэтому «процесс закончил выполнение» и «все его следы исчезли из таблицы процессов» не всегда происходят одновременно.
Почему завершившийся процесс может ненадолго остаться зомби?
В лаборатории Управление и мониторинг процессов Linux запустите несколько экземпляров и сравните их PID и состояния. Лаборатория Команда top в Linux показывает меняющиеся метрики планирования и ресурсов.
Урок завершён
Вы завершили Сведения о процессах
Теперь вы можете описать процесс как нечто большее, чем файл программы.
Отличайте сохранённый исполняемый код от живого экземпляра процесса.
Определяйте состояние и ресурсы, отслеживаемые ядром.
Связывайте планирование с готовыми потоками, а не равными долями.
Помните, что статус завершения может сохраняться, пока родитель его не получит.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт