Gymterview
middle

Как управлять процессами в Linux?

Управление процессами — это набор операций для просмотра, запуска, остановки и мониторинга программ, работающих в системе.

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

Пример
# ps — снимок текущих процессов
ps                               # Процессы текущего терминала
ps aux                           # Все процессы системы (BSD-формат)
ps -ef                           # Все процессы (POSIX-формат)
ps aux | grep java               # Найти Java-процессы
ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%mem | head  # Топ по памяти

# top — интерактивный мониторинг
top                              # Запуск (q — выход, M — сортировка по памяти)
top -p 1234                      # Мониторинг конкретного процесса

# htop — улучшенный top (нужно установить)
htop                             # Интерактивный с цветным интерфейсом

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

Пример
# & — запуск в фоновом режиме
java -jar app.jar &

# Ctrl+Z — приостановить текущий процесс (suspend)
# bg — возобновить приостановленный процесс в фоне
bg

# fg — перевести фоновый процесс на передний план
fg
fg %2                            # Конкретная задача по номеру

# jobs — список фоновых задач текущего shell
jobs
# [1]+  Running                 java -jar app.jar &
# [2]-  Stopped                 vim config.yml

nohup — процесс, переживающий закрытие терминала

Пример
# Процесс продолжит работу после закрытия терминала
nohup java -jar app.jar &
# Вывод будет записан в nohup.out

# С перенаправлением вывода
nohup java -jar app.jar > app.log 2>&1 &

# Полное отсоединение от терминала
nohup java -jar app.jar > /dev/null 2>&1 &
disown

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

Пример
kill 1234                        # Отправить SIGTERM (мягкое завершение)
kill -9 1234                     # Отправить SIGKILL (принудительное завершение)
kill -15 1234                    # SIGTERM явно
kill -HUP 1234                   # Перечитать конфигурацию

killall java                     # Завершить все процессы с именем java
pkill -f "app.jar"               # Завершить процессы по шаблону командной строки

Диагностика портов и PID

Пример
# Найти процесс, занимающий порт
lsof -i :8080
ss -tlnp | grep 8080
netstat -tlnp | grep 8080

# Узнать PID по имени
pgrep java
pgrep -f "spring-boot"

# Дерево процессов
pstree
pstree -p 1234                   # Дерево от конкретного процесса

На собеседовании: интервьюер часто просит показать, как найти процесс, занимающий порт 8080, и как его остановить. Ожидаемый ответ: lsof -i :8080 или ss -tlnp | grep 8080, затем kill <PID>. Частая ошибка — сразу использовать kill -9 вместо обычного kill (SIGTERM), лишая приложение возможности корректно завершиться.