Linux и Bash

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

Процесс — это выполняющаяся программа в памяти компьютера. Каждая запущенная программа создает один или несколько процессов.

Основные характеристики процесса

PID (Process ID)

Уникальный числовой идентификатор процесса в системе

PPID (Parent Process ID)

Идентификатор родительского процесса, который создал данный процесс

Состояние процесса

  • R (Running) — выполняется
  • S (Sleeping) — ожидает события
  • D (Uninterruptible) — ожидает ввода/вывода
  • Z (Zombie) — завершен, но не удален
  • T (Stopped) — остановлен

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

Все процессы в Linux образуют дерево. Корневой процесс — init (PID 1), который создается при загрузке системы.

# Просмотр дерева процессов
                        pstree
                        # или
                        ps auxf
                    
Системные процессы работают в фоновом режиме и обеспечивают функционирование операционной системы. Пользовательские процессы выполняют задачи пользователя.

5.2 Просмотр процессов

В Linux есть несколько команд для просмотра информации о процессах.

ps — список процессов


                        ps                    # процессы текущего пользователя
                        ps aux                # все процессы с подробной информацией
                        ps -ef                # все процессы в формате BSD
                        ps aux | grep firefox # найти процессы firefox
                    

Расшифровка вывода ps aux


                        USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
                        root         1  0.0  0.1  78008  9004 ?        Ss   Dec15   0:01 /sbin/init
                        user      1234  2.5  1.2 123456 45678 pts/0    R+   10:30   0:05 firefox
                        # ↑      ↑    ↑    ↑     ↑     ↑      ↑        ↑     ↑       ↑     ↑
                        # |      |    |    |     |     |      |        |     |       |     └─ команда
                        # |      |    |    |     |     |      |        |     |       └─────── время CPU
                        # |      |    |    |     |     |      |        |     └─────────────── время запуска
                        # |      |    |    |     |     |      |        └───────────────────── состояние
                        # |      |    |    |     |     |      └─────────────────────────────── терминал
                        # |      |    |    |     |     └─────────────────────────────────────── физическая память
                        # |      |    |    |     └─────────────────────────────────────────────── виртуальная память
                        # |      |    |    └───────────────────────────────────────────────────── % памяти
                        # |      |    └─────────────────────────────────────────────────────────── % CPU
                        # |      └───────────────────────────────────────────────────────────────── PID
                        # └───────────────────────────────────────────────────────────────────────── пользователь
                    

top — интерактивный монитор процессов


                        top                   # запустить top
                        # Управление:
                        # q - выход
                        # k - завершить процесс
                        # r - изменить приоритет
                        # h - помощь
                    

htop — улучшенный top


                        htop                  # запустить htop (если установлен)
                        # Более удобный интерфейс с цветовой подсветкой
                    
Установка htop: sudo apt install htop (Ubuntu/Debian) или sudo yum install htop (CentOS/RHEL)

5.3 Управление процессами

Управление процессами включает запуск, остановку, приостановку и завершение процессов.

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


                        command &             # запустить команду в фоне
                        nohup command &       # запустить команду в фоне, игнорируя SIGHUP
                        command > output.log 2>&1 &  # запустить с перенаправлением вывода
                    

Управление фоновыми задачами


                        jobs                  # показать фоновые задачи
                        fg %1                 # вернуть задачу 1 на передний план
                        bg %1                 # продолжить задачу 1 в фоне
                        fg                    # вернуть последнюю задачу на передний план
                    

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


                        kill PID              # отправить SIGTERM (мягкое завершение)
                        kill -9 PID           # отправить SIGKILL (принудительное завершение)
                        killall firefox       # завершить все процессы firefox
                        pkill -f "python"     # завершить процессы по имени команды
                    

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

Основные сигналы

  • SIGTERM (15) — запрос на завершение
  • SIGKILL (9) — принудительное завершение
  • SIGSTOP (19) — приостановка
  • SIGCONT (18) — продолжение
  • SIGHUP (1) — перезагрузка конфигурации
Осторожно с SIGKILL! Этот сигнал нельзя перехватить, процесс завершится немедленно без сохранения данных.

5.4 Мониторинг системы

Мониторинг ресурсов системы помогает понять, как работает Linux и где могут быть проблемы.

free — информация о памяти


                        free                  # показать использование памяти
                        free -h               # в удобном формате
                        free -m               # в мегабайтах
                        free -s 5             # обновлять каждые 5 секунд
                    

df — использование дискового пространства


                        df                   # использование дисков
                        df -h                # в удобном формате
                        df -T                # с типами файловых систем
                        du -sh /home         # размер каталога /home
                    

uptime — время работы системы


                        uptime               # время работы и нагрузка
                        # Вывод: 10:30:45 up 2 days, 3:15, 2 users, load average: 0.52, 0.58, 0.59
                        #        ↑           ↑        ↑        ↑              ↑
                        #        время      время    количество  средняя нагрузка
                        #        запуска    работы   пользователей (1, 5, 15 мин)
                    

iostat — статистика ввода/вывода


                        iostat               # статистика I/O (если установлен)
                        iostat -x 2          # каждые 2 секунды
                    

Полезные команды мониторинга


                        vmstat 1             # статистика виртуальной памяти
                        sar -u 1 10          # статистика CPU (если установлен)
                        lscpu                # информация о процессоре
                        lsblk                # информация о блочных устройствах
                    
Нагрузка системы показывает среднее количество процессов, ожидающих выполнения. Значение 1.0 означает, что система загружена на 100%.