Как убить процесс в macOS работающий на определенном порте?
Во время разработки бывает так, что определенный процесс завис и его нужно убить вручную. Например, при работе с Ruby on Rails - иногда нужно убить сервер, который работает на 3000 порте. Рассмотрим, как это сделать:
Открываем терминал и вводим:
Открываем терминал и вводим:
sudo lsof -i tcp:3000
Введем пароль пользователя и получим такой результат:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 47571 username 13u IPv4 0x8d4c374540e3545 0t0 TCP localhost:hbci (LISTEN) ruby 47571 username 14u IPv6 0x8d4c374540da2d5 0t0 TCP localhost:hbci (LISTEN)
Получаем довольно информативную таблицу (если на порте ничего нет - в терминале будет пусто). Нам понадобится PID процесса, чтобы убить его:
kill -9 PID # команда принудительного завершения процесса
kill -9 47571 # в нашем случае PID - 47571
Таким образом мы принудительно убили процесс на 3000 порте, который был занят Ruby on Rails приложением.
Вот так выглядит лог принудительного завершения работы сервера Puma на локальной машине с macOS (последняя строка):
=> Booting Puma => Rails 6.0.1 application starting in development => Run `rails server --help` for more startup options Puma starting in single mode... * Version 3.12.1 (ruby 2.6.5-p114), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://localhost:3000 Use Ctrl-C to stop Killed: 9
Стоит отметить, что 3000 порт и Ruby on Rails приложение были приведены в качестве примера, а команды sudo lsof -i tcp:PORT и kill -9 PID - универсальны.