Основы процессов

  • Как в Linux уникально идентифицируется процесс? С помощью PID (идентификатор процесса), который не повторяется в один момент времени.

  • Что такое процесс init? init — первый процесс, который запускает ядро. Он отвечает за инициализацию системы (службы, модули и пр.). В современных дистрибутивах его заменяет systemd.

  • Какие системные вызовы происходят при запуске команды (например, ls) в bash?

    1. Bash выполняет fork — создаёт новый процесс.
    2. В дочернем процессе выполняется exec — замена его на новую программу (ls).
    3. Команда запускается и выполняется.
  • Как работает терминал (кратко)? Терминал ждёт ввода пользователя, форкается для запуска команды и ждёт завершения процесса. После этого возвращается к ожиданию команд.

Команды для работы с процессами

  • Как посмотреть свои текущие процессы?

    • ps u
  • Как увидеть все процессы на хосте?

    • ps aux (BSD-стиль)
    • ps -ef (POSIX-стиль)
  • Как посмотреть процессы в виде дерева?

    • pstree
  • Современные фишки:

    • ps --sort=-%mem — сортировка процессов по использованию памяти
    • ps --sort=-%cpu — сортировка по CPU
    • pgrep <pattern> — быстро найти PID по шаблону

Фоновые и приоритетные процессы

  • Как запустить процесс в фоне? В конце команды добавить &

    somecommand &
    
  • Как увидеть свои фоновые задачи (jobs)?

    • jobs
  • Как вернуть задачу №1 на передний план?

    • fg %1
  • Как приостановить процесс без завершения?

    • Нажать Ctrl + Z (SIGTSTP)
  • Как продолжить выполнение процесса в фоне?

    • bg %1
  • Как отправить SIGINT (прервать, остановить) процесс на переднем плане?

    • Нажать Ctrl + C
  • Современные фишки:

    • disown — убрать задачу из контроля шелла (полезно, если закрываешь терминал)
    • jobs -l — показать PID для каждого job

Сигналы и процессы

  • Что такое сигналы? Сигналы — это “софтверные прерывания”, которые используются для коммуникации между процессами: остановка, перезапуск, завершение и т.д.

  • Как корректно завершить процесс?

    • Отправить SIGTERM (kill -15 PID или просто kill PID)
  • Как “жёстко” завершить процесс?

    • Отправить SIGKILL (kill -9 PID)
  • Что произойдёт, если закрыть терминал с запущенным процессом?

    • Процесс получит SIGHUP и обычно завершится.
  • Как этого избежать?

    • Использовать nohup:

      nohup ./script &
      
    • Современные фишки:

      • setsid ./script — запуск процесса вне сессии
      • tmux / screen — мультиплексоры терминала: процессы не зависят от SSH/терминала вообще
  • SIGQUIT — завершить интерактивную сессию с дампом памяти.

  • SIGCONT — продолжить приостановленный процесс.

Расширенные команды работы с процессами

  • Как убить все процессы, начинающиеся на “fire”?

    • pkill fire*
  • Что такое nice? nice — запуск команды с пониженным или повышенным приоритетом по отношению к другим процессам.

  • “nice” больше — приоритет выше? Нет! Чем выше значение nice, тем ниже приоритет процесса.

  • Стандартное значение nice:

    • 0
  • Может ли обычный пользователь уменьшить значение nice (то есть повысить приоритет)?

    • Нет, только root может задавать nice меньше нуля.
  • Современные фишки:

    • renice — изменить приоритет уже запущенного процесса
    • ionice — задать приоритет ввода/вывода для задач (актуально для бэкапов/архивов)

Мониторинг процессов

  • Как смотреть нагрузку процессов?

    • top
    • htop (более удобный)
  • Как изменить частоту обновления в top?

    • Нажать d, затем указать, например, 1.0
  • Современные инструменты мониторинга:

    • Cockpit

    • Grafana

    • Prometheus

    • Nagios

    • Telegraf

    • Дополнительно:

      • Glances — интерактивная CLI-утилита, показывает всё (процессы, память, сеть, диски)
      • bpytop/bashtop — красивые топы в терминале
      • Netdata — автодашборд по всем системным метрикам
      • systemd-cgtop — загрузка cgroup-ов (актуально для контейнеризации и systemd)

⚡️ Краткий справочник (2025)

  • Все процессы: ps aux или ps -ef
  • Дерево процессов: pstree
  • Фоновый запуск: somecommand &
  • Просмотр задач шелла: jobs
  • Передний план: fg %N
  • Фон: bg %N
  • Пауза: Ctrl+Z
  • Продолжить: bg %N
  • Прервать: Ctrl+C
  • Мягкое завершение: kill PID
  • Жёсткое завершение: kill -9 PID
  • Игнорировать SIGHUP: nohup command & или disown
  • Мониторинг: top, htop, glances, bpytop, systemd-cgtop
  • Системный мониторинг: Cockpit, Grafana, Prometheus, Nagios, Netdata

На этом все.

Дополнительные ссылки

  1. 30 Linux Processes Exercises For Sysadmins