(продолжение предыдущего поста)
1. Введение
→ Процесс — это экземпляр запущенной программы в Linux.
→ Каждый процесс имеет собственное пространство памяти, контекст выполнения и системные ресурсы.
→ Управление процессами включает создание, планирование, мониторинг и завершение процессов.
2. Жизненный цикл процесса
→ Типичный жизненный цикл процесса включает:
→ Создание — инициируется другим процессом (обычно оболочкой).
→ Выполнение — процесс работает и выполняет задачи.
→ Ожидание — процесс может ожидать ресурсы или события.
→ Завершение — процесс завершается или принудительно останавливается.
→ Ядро управляет всеми переходами между этими состояниями.
3. Типы процессов
→ Процесс переднего плана:
→ Работает в интерактивном режиме и занимает терминал.
→ Пример:
vim file.txt → Процесс фонового режима:
→ Работает без взаимодействия с терминалом.
→ Пример:
./script.sh & → Демон‑процесс:
→ Постоянно работает в фоновом режиме, предоставляя сервисы.
→ Примеры:
sshd, cron, systemd.4. Идентификация процессов
→ Каждый процесс идентифицируется PID (идентификатором процесса).
→ PPID (идентификатор родительского процесса) указывает на процесс, который его создал.
→ Процесс
init/systemd — предок всех процессов, всегда имеет PID 1. → Для просмотра идентификаторов процессов:
→
ps →
top →
pgrep process_name5. Создание процессов
→ В Linux для создания новых процессов используются системные вызовы
fork() и exec(). →
fork() → Создаёт дубликат текущего процесса.
→ У дочернего процесса присваивается уникальный PID.
→
exec() → Заменяет память текущего процесса новой программой.
→ Используется для запуска новых исполняемых файлов.
→ Вместе
fork() и exec() составляют основу создания процессов в Linux.6. Состояния процессов
→ Процессы в Linux могут находиться в нескольких состояниях:
→ R (Running): Выполняется или готов к выполнению.
→ S (Sleeping): Ожидает события или ресурса.
→ D (Uninterruptible Sleep): Ожидает операций ввода‑вывода.
→ T (Stopped): Приостановлен сигналом.
→ Z (Zombie): Завершил выполнение, но ожидает подтверждения от родительского процесса.
→ Используйте
ps -aux для просмотра состояний процессов.7. Планирование процессов
→ Планировщик Linux решает, какой процесс будет выполняться следующим на CPU.
→ Используются алгоритмы планирования, такие как CFS (Completely Fair Scheduler).
→ Приоритеты определяются значениями
nice в диапазоне от −20 (наивысший) до +19 (наинизший). → Команды:
→
nice -n 10 process_name — запустить процесс с пониженным приоритетом. →
renice -n -5 PID — изменить приоритет запущенного процесса.8. Мониторинг процессов
→ Команды для мониторинга активных процессов:
→
ps — снимок запущенных процессов. →
top — отображение процессов в реальном времени. →
htop — расширенная интерактивная версия top. →
pidof — найти PID процесса. →
pstree — просмотреть иерархию процессов.9. Управление процессами
→ Управление запущенными процессами с помощью команд оболочки:
→
& — запустить процесс в фоновом режиме. → Ctrl + Z — приостановить процесс.
→
bg — возобновить процесс в фоновом режиме. →
fg — вывести процесс на передний план. →
kill PID — завершить процесс. →
kill -9 PID — принудительно завершить процесс.10. Зомби‑процессы и осиротевшие процессы
→ Зомби‑процесс:
→ Процесс завершил работу, но родительский процесс не прочитал его статус завершения.
→ Существует как запись в таблице процессов.
→ Осиротевший процесс:
→ Родительский процесс завершился до дочернего.
→ Автоматически принимается
init/systemd. → Оба типа можно отслеживать и управлять ими с помощью
ps или top.11. Демоны и сервисы
→ Демоны — это специальные фоновые процессы, управляемые
systemd. → Конфигурационные файлы хранятся в
/etc/systemd/system/. → Команды:
→
systemctl start service_name →
systemctl stop service_name →
systemctl status service_name →
systemctl enable service_name12. Межпроцессное взаимодействие (IPC)