Научиться управлять процессами и портами с помощью команд в Linux очень важно, если вы планируете использовать дистрибутивы с открытым исходным кодом, особенно в коммерческих целях. Это помогает администраторам Linux найти и завершить упрямый процесс, занимающий определенный порт и мешающий запуску другого сервиса. В этом руководстве мы рассмотрим несколько методов, которые могут быть использованы для уничтожения процесса, запущенного на определенном порту в Linux, либо изящно, либо принудительно, в зависимости от сценария.
Вы можете использовать этот учебник для Ubuntu 22.04/20.04/19.04, Debian 12,11,10, Linux Mint, RedHat, Rocky Linux, Amazon Linux, AlmaLinux и других…
Идентификация процесса с помощью Top, Netstat или lsof
Если вы планируете убить какой-то процесс, то должны хотя бы знать его идентификатор, поэтому, прежде чем рассказывать о методах завершения процесса, давайте узнаем две команды, которые можно использовать в Ubuntu Linux для определения идентификаторов запущенных процессов (PID), связанных с прослушиваемыми портами.
Использование Top для поиска идентификатора активного процесса (PID):
Чтобы найти процесс вместе с запущенными в нем службами, пользователи могут воспользоваться утилитой TOP:
top
Она выведет список всех активных процессов, используйте клавишу со стрелкой вниз, чтобы прокрутить список и найти то, что вы ищете.

Использование netstat
Другой наиболее распространенной командой является netstat, которая используется не только в Linux. Чтобы перечислить все активные порты Intenet:
sudo netstat -tulpn
или, в качестве альтернативы, вы можете использовать:
ss
В то время как, если вы уже знаете номер порта , идентификатор процесса, который вы хотите узнать, затем используйте:
sudo netstat -tulpn | grep :your_port_number
Заменить номер_порта укажите точный номер порта, который вы хотите найти, и команда покажет идентификатор процесса.
Использование lsof:
Как и в случае с netstat, мы можем использовать другую команду “lsof” для поиска идентификатора процесса конкретного порта.
sudo lsof -i :your_port_number
Для наглядности смотрите скриншот.

Способ 1: Благодатное завершение процесса с помощью Kill
Теперь, когда вы определили, что такое PID службы или порта, который вы хотите завершить, мы можем использовать KILL чтобы изящно завершить этот процесс.
Синтаксис:
kill <PID>
Заменить <PID> в приведенном выше синтаксисе на фактический идентификатор процесса, который вы хотите завершить. Эта команда отправит сообщение SIGTERM сигнал процессу, позволяющий ему выполнить операции очистки перед завершением.
Пример:
kill 631

Способ 2: Принудительное завершение процесса с помощью kill
Если даже после выполнения команды KILL процесс не завершается или не отвечает на команду SIGTERM сигнал, то мы можем использовать “-9″ опция для выпуска “SIGKILL” сигнал. Он принудительно завершит процесс.
kill -9 <PID>
Снова замените <PID> с фактическим идентификатором процесса, однако эта команда не будет выполнять задачу очистки, а сразу завершит процесс, поэтому используйте ее с осторожностью.
Способ 3: команда pkill
Pkill – это то же самое, что и kill, но с более широким набором опций для использования. Мы даже можем использовать имена процессов для отправки сигналов kill.
Синтаксис:
sudo pkill -f "<process_name>"
Заменить <имя_процесса> с именем процесса, который вы хотите завершить. Это может быть полезно, когда вы знаете имя процесса, но не знаете его PID.
Например, вместо идентификатора процесса вы хотите использовать его имя. Допустим, вы хотите завершить процесс mysql.
sudo pkill -f mysqld
Способ 4: Команда фьюзера
Итак, мы рассмотрели два командных инструмента для завершения процесса по его идентификатору или имени. А что, если вы хотите завершить процесс, указав номер порта? Для этого у нас есть команда “fuser”, которая может быть использована для идентификации и завершения процессов, использующих определенный порт.
Синтаксис:
sudo fuser -k your_port_number/udp
Заменить номер_порта с фактическим номером порта. Допустим, вы хотите убить службу или процесс, использующий номер порта 80 то команда, использующая fuser, будет выглядеть следующим образом:
sudo fuser -k 80/tcp
Эта команда посылает сигнал SIGKILL процессам, использующим указанный порт.
Если приведенная выше команда не убивает процесс, то вместо того, чтобы полагаться на сигнал по умолчанию, используйте команду -TERM вариант:
fuser -k -TERM port/udp or fuser -k -TERM port/tcp
пример:
sudo fuser -k -TERM 80/tcp
Способ 5: Использование killall
Еще один способ завершить процесс – использовать команду “killall”, которая также может завершать процессы по имени.
Синтаксис:
sudo killall <process_name>
Заменить <имя_процесса> с именем процесса, который должен быть завершен. Это уничтожает все экземпляры указанного процесса.
Пример:
sudo killall apache2
Заключение:
Мы рассмотрели несколько команд, позволяющих легко управлять и завершать процессы в Ubuntu Linux, используя номер порта для идентификатора процесса, а при необходимости можно также принудительно убивать процессы. Вы можете выбрать тот метод или команду, которые подходят для ваших нужд и легко запоминаются. Однако всегда сначала пытайтесь завершить процесс с помощью сигнала SIGTERM, а если процесс не отвечает, то SIGKILL. Но будьте осторожны, особенно при принудительном завершении процесса, чтобы избежать непредвиденных последствий.