Одна из самых неприятных вещей во время разработки - это момент, когда ты сталкиваешься со следующей ошибкой в командной строке при попытке запустить приложение локально:
Server Error: this port is already in use
В большинстве случаев это означает, что мы забыли о процессе, который работает в фоновом режиме, или думали, что «убили» тот процесс, но на самом деле этого не произошло, поскольку мы не использовали CTRL + C
.
Общий подход
На машине Linux / Mac эта команда может помочь:
lsof -ti tcp:[PORT] | xargs kill
Чтобы понять, что же происходит, давай разберем это пошагово:
lsof
используется для вывода списка открытых файлов, чтобы можно было отслеживать процессы, которые прослушивают определенный порт;-i
используется для поиска желаемого порта;-t
используется для возврата толькоPID
(идентификатор процесса), который мы ищем;|
используется для передачи списка найденныхPID
следующей команде;xargs
используется для применения kill к каждому из этихPID
;kill
фактически «убивает» каждыйPID
. Возможно, если процессы нужно «убить» принудительно, нам понадобиться использоватьkill -9
.
Более простой подход
А сейчас давай рассмотрим более простое решение, которое можно использовать:
# One port
npx kill-port [PORT]
# Multiple ports
npx kill-port [PORT1] [PORT2] [PORTN]
Легче, правда? Таким образом мы извлекаем kill-port
пакета npm
, чтобы он мог сделать за нас всю грязную работу.
Он гораздо декларативнее и не требует пояснений, поэтому его определенно проще запомнить.