Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Завершение процессов в Linux
Завершение процессов в Linux — важная часть управления системой. Для Java разработчика это критично при отладке приложений и управлении Томкатом, базами данных и другими сервисами.
1. Основная команда kill
Синтаксис:
kill [сигнал] [PID]
Найти PID процесса:
# Найти все Java процессы
ps aux | grep java
# Найти по портуjavajava
lsof -i :8080 # Какой процесс слушает порт 8080
# Более мощный поиск
pgrep -f "java -jar application.jar"
# Поиск с названием
pgrep -f tomcat
Примеры использования:
# Найти Java процесс
ps aux | grep java
# Результат: user 12345 0.5 2.1 ...
# Послать сигнал SIGTERM (корректное завершение)
kill 12345
# Послать сигнал SIGKILL (принудительное завершение)
kill -9 12345
# Или через имя сигнала
kill -KILL 12345
kill -TERM 12345
2. Иерархия сигналов
# SIGTERM (15) - самый вежливый
# Позволяет процессу завершиться корректно
kill -TERM 12345
kill -15 12345
kill 12345 # По умолчанию SIGTERM
# SIGINT (2) - прерывание (Ctrl+C эквивалент)
kill -INT 12345
# SIGKILL (9) - принудительное убийство
# Процесс не может перехватить этот сигнал
kill -KILL 12345
kill -9 12345
# SIGHUP (1) - перезагрузка конфига
kill -HUP 12345
# SIGSTOP (19) - приостановить процесс
kill -STOP 12345
# SIGCONT (18) - возобновить процесс
kill -CONT 12345
3. Остановка Java приложений правильно
Рекомендуемый порядок:
# Шаг 1: Попробуй SIGTERM (корректное завершение)
# Томкат получит сигнал и очистит ресурсы, закроет БД соединения
kill 12345
# Шаг 2: Подожди 10-30 секунд
sleep 10
# Шаг 3: Проверь, убит ли процесс
ps aux | grep 12345
# Шаг 4: Если всё ещё живой - используй SIGKILL
kill -9 12345
4. Команда killall
Убивает все процессы с заданным именем:
# Завершить все Java процессы корректно
killall java
# Принудительное завершение
killall -9 java
# По имени файла
killall tomcat
# Без killall — через pgrep + xargs
pgrep -f "java -jar" | xargs kill -9
5. Команда pkill
Более гибкая версия killall с поддержкой паттернов:
# Убить все процессы, содержащие "application.jar"
pkill -f application.jar
# Принудительно
pkill -9 -f application.jar
# Убить процессы определённого пользователя
pkill -u username
# Убить процессы старше 10 дней
pkill --older 10d java
6. Команда killall для Tomcat
# Для Tomcat обычно первый попробовать корректный shutdown
/opt/tomcat/bin/shutdown.sh
# Если не помогло - kill
killall -TERM tomcat
# Проверить
sleep 5 && ps aux | grep tomcat
# Если всё ещё там
killall -9 tomcat
7. Практический сценарий для Java разработчика
# Запустил приложение и оно зависло
# Найди порт
lsof -i :8080
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# java 12345 user 45u IPv6 0x123 0t0 TCP *:8080 (LISTEN)
# Коррекно заверши процесс
kill 12345
# Проверь ещё раз через 5 сек
sleep 5 && lsof -i :8080
# Если порт всё ещё занят - принуди
kill -9 12345
# Проверь, что убилось
lsof -i :8080 # Не должно быть результата
8. Обработка сигналов в Java коде
Добрая практика — обрабатывать SIGTERM в своём приложении:
public class Application {
public static void main(String[] args) {
// Зарегистрируем обработчик для Ctrl+C и kill сигналов
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.out.println("Получен сигнал завершения!");
// Закроем ресурсы
closeDatabase();
stopServer();
flushLogs();
System.out.println("Корректное завершение выполнено");
}));
// Запуск приложения
startApplication();
}
}
Шаг 1 vs Шаг 2 при работе с Java:
# ✅ ПРАВИЛЬНО (даёт приложению время на graceful shutdown)
kill 12345 # или kill -15
# ❌ НЕПРАВИЛЬНО (теряются данные, незакрытые соединения)
kill -9 12345 # Только если первый не сработал
9. Таблица команд
| Команда | Использование | Примечание |
|---|---|---|
| kill PID | Одиночный процесс | Основная команда |
| killall name | Все процессы по имени | Опасно - может убить системные |
| pkill -f pattern | По паттерну | Более безопасно, гибче |
| pgrep -f pattern | Найти PID | Используй перед kill |
| lsof -i :PORT | Процесс на порту | Для Java разработчиков |
Главное правило
ТЕРМ → ЖДИТЕ 10 СЕК → ПРОВЕРЬТЕ → KILL (-9)
Всегда начинай с SIGTERM (вежливое завершение), жди несколько секунд, и только если процесс не завершился — используй SIGKILL (принудительное завершение).