Ysa-k06-ru

From
Revision as of 13:33, 30 December 2025 by Jpr (talk | contribs) (Created page with "== Kapitel 6: Управление процессами в Unix/Linux == === Введение === В Unix/Linux одновременно могут выполняться **десятки, сотни и даже тысячи программ**. Каждая запущенная программа или часть программы называется **процессом** (process). Для системного администратора умение: * смот...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Kapitel 6: Управление процессами в Unix/Linux

Введение

В Unix/Linux одновременно могут выполняться **десятки, сотни и даже тысячи программ**. Каждая запущенная программа или часть программы называется **процессом** (process).

Для системного администратора умение:

  • смотреть, какие процессы запущены,
  • понимать, сколько ресурсов они используют,
  • запускать процессы в фоне,
  • корректно завершать «зависшие» программы

— является **критически важным практическим навыком**.

В этой главе мы подробно разберём:

  • что такое процесс,
  • как наблюдать за процессами,
  • как работать с процессами в bash,
  • как завершать процессы с помощью `kill`.

---

Что такое процесс

    • Процесс** — это экземпляр выполняемой программы.

Примеры процессов:

  • веб-сервер `nginx`
  • текстовый редактор `nano`
  • команда `ls`
  • демон `sshd`

Каждый процесс имеет:

  • **PID** (Process ID) — уникальный идентификатор процесса
  • владельца (пользователя)
  • состояние (работает, спит, остановлен)
  • потребление ресурсов (CPU, RAM)

---

Иерархия процессов

В Linux процессы образуют **дерево**:

  • каждый процесс (кроме первого) имеет **родительский процесс**
  • самый первый процесс — `init` или `systemd` (PID = 1)

Пример:

  • `bash` → `nano`
  • `bash` → `ls`

---

Просмотр процессов: ps

Команда `ps` показывает **снимок текущих процессов**.

Базовое использование

ps

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

Расширенный вывод (рекомендуется)

ps aux

Расшифровка:

  • `a` — процессы всех пользователей
  • `u` — формат с пользователем
  • `x` — включая фоновые процессы

Пример вывода:

USER   PID  %CPU %MEM  COMMAND
root     1   0.0  0.1  systemd
user  2345   1.2  3.4  firefox

Важные столбцы:

  • **USER** — владелец процесса
  • **PID** — идентификатор процесса
  • **%CPU** — загрузка процессора
  • **%MEM** — использование памяти
  • **COMMAND** — команда/программа

---

Просмотр процессов в реальном времени: top

Команда `top` показывает процессы **в реальном времени**.

top

Особенности:

  • обновляется каждые несколько секунд
  • показывает нагрузку CPU, RAM, swap
  • сортирует процессы по нагрузке

Полезные клавиши в `top`:

  • `q` — выйти
  • `P` — сортировка по CPU
  • `M` — сортировка по памяти
  • `k` — завершить процесс (по PID)

---

Process ID (PID)

    • PID** — уникальный номер процесса.

Пример:

nano test.txt

В другом терминале:

ps aux | grep nano

Вы увидите PID процесса `nano`.

PID нужен для:

  • мониторинга
  • завершения процесса
  • отладки

---

Процессы в bash

Запуск процесса в фоне

Добавьте `&` в конец команды:

sleep 60 &

Вывод:

[1] 3456
  • `[1]` — номер задания (job)
  • `3456` — PID процесса

Процесс выполняется в фоне, терминал свободен.

---

Просмотр фоновых задач

jobs

Пример:

[1]+ Running sleep 60 &

---

Перевод процесса в фон и обратно

  • `Ctrl + Z` — приостановить процесс
  • `bg` — продолжить в фоне
  • `fg` — вернуть в передний план

Пример:

nano test.txt

Нажмите `Ctrl+Z`, затем:

bg

---

Завершение процессов: kill

Иногда процесс:

  • завис
  • потребляет слишком много ресурсов
  • не отвечает

Для этого используется команда `kill`.

Завершение по PID

kill PID

Пример:

kill 3456

По умолчанию отправляется сигнал **SIGTERM (15)** — «корректное завершение».

---

Принудительное завершение

Если процесс не завершается:

kill -9 PID

Сигнал **SIGKILL (9)**:

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

---

Поиск PID процесса

ps aux | grep firefox

Или:

pgrep firefox

---

Практические задания

Практика 1: Наблюдение за процессами

  1. Откройте терминал
  1. Выполните:
ps aux
  1. Найдите:
    • systemd (PID 1)
    • bash
    • sshd (если есть)

---

Практика 2: top

  1. Запустите:
top
  1. Посмотрите:
    • загрузку CPU
    • использование памяти
    • самый «тяжёлый» процесс
  1. Выйдите клавишей `q`

---

Практика 3: Фоновые процессы

  1. Запустите процесс:
sleep 300 &
  1. Проверьте:
jobs
  1. Найдите PID:
ps aux | grep sleep

---

Практика 4: Завершение процесса

  1. Завершите процесс `sleep`:
kill PID
  1. Убедитесь, что он завершён:
jobs

---

Практика 5 (важно): SIGKILL

  1. Запустите:
sleep 1000 &
  1. Завершите принудительно:
kill -9 PID
  1. Проверьте, что процесс исчез

---

Типичные ошибки новичков

  • ❌ Использовать `kill -9` всегда
  • ❌ Завершать системные процессы (PID 1!)
  • ❌ Не проверять PID перед `kill`
  • ❌ Работать под `root` без необходимости

---

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

  • `man ps`
  • `man top`
  • `man kill`
  • `man jobs`
  • `man bash`
  • Книга: **"The Linux Command Line" – William Shotts**
  • Практика в виртуальной машине (ломать — можно!)

---

Итог

После этой главы ученик должен уметь:

  • понимать, что такое процесс
  • находить процессы в системе
  • анализировать нагрузку
  • запускать процессы в фоне
  • безопасно завершать программы

Это **основа реальной работы Unix System Administrator**.