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), лишая приложение возможности корректно завершиться.