Как освободить локальный хост из Error: слушайте EADDRINUSE

Я тестирую сервер, написанный на nodejs в Windows 7, и когда я пытаюсь запустить тестер в командной строке, я получаю следующую ошибку

Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)

как я могу это исправить без перезагрузки?

31 ответ

Решение

Это означает, что адрес, к которому вы пытаетесь привязать сервер, используется. Попробуйте другой порт или закройте программу, используя этот порт.

Бежать:

ps -ax | grep node

Вы получите что-то вроде:

60778 ??         0:00.62 /usr/local/bin/node abc.js

Затем сделайте:

kill -9 60778

В Linux (по крайней мере, производные Ubuntu)

killall node

проще, чем эта форма.

ps | grep <something>
kill <somepid>

Ни один из них не будет работать, если у вас есть ребенок-сирота, который держит порт. Вместо этого сделайте это:

netstat -punta | grep <port>

Если порт удерживается, вы увидите что-то вроде этого:

tcp           0      0.0.0.0:<port>          0.0.0.*       LISTEN     <pid>/<parent>

Теперь убей pid:

kill -9 <pid>

Следующая команда предоставит вам список запущенных процессов узлов.

ps | grep node

Чтобы освободить этот порт, остановите процесс, используя следующее.

kill <processId>

Вы получаете ошибку EADDRINUSE потому что порт, который хочет использовать ваше приложение, занят другим процессом. Чтобы освободить этот порт, вам нужно прекратить процесс оккупации.

Поскольку вы работаете в Windows, вы можете завершить процесс с помощью командной строки (cmd). С cmd Вы можете узнать идентификатор процесса (PID) блокирующего приложения. Вам понадобится PID, чтобы завершить / убить процесс.

Вот пошаговое руководство...

  1. Найдите все процессы, запущенные на указанном порту (в данном примере это "3000"):

    netstat -ano | найти ":3000 "

  2. netstat Команда выведет список всех процессов, запущенных на указанном порту. В последнем столбце netstat результаты, которые вы можете увидеть PIDs (в этом примере PID равен "8308"). Вы можете узнать больше о конкретных PID запустив следующую команду:

    список задач /fi "pid eq 8308"

  3. Если вы хотите завершить процесс, вы можете сделать это с помощью следующей команды, используя PID (в этом примере PID равен "8308"):

    taskkill / pid 8308 / f

Скриншот

введите описание изображения здесь

Когда вы получаете сообщение об ошибке: слушайте EADDRINUSE,

Попробуйте запустить следующие команды оболочки:

netstat -a -o | grep 8080
taskkill /F /PID 6204

я grepРед для 8080, потому что я знаю, что мой сервер работает на порту 8080. (static говорит мне, когда я начинаю это: "служу". на http://127.0.0.1:8080/'.) Возможно, вам придется искать другой порт.

Предположим, ваш сервер работает port 3000

lsof -i tcp:3000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    node    11716 arun   11u  IPv6 159175      0t0  TCP *:3000 (LISTEN)

после этого использования kill -9 <pid>

в вышеуказанном случае sudo kill -9 11716

Используйте команду ниже, чтобы убить процесс, работающий на определенном порту - 3000 в этом примере ниже

kill -9 $(lsof -t -i:3000)

Проверьте идентификатор процесса

sudo lsof -i:8081

Чем убить конкретный процесс

sudo kill -9 2925

Одно из возможных решений, которое работало для меня, было просто закрыть окно в браузере, где у меня был запущен соответствующий скрипт " http://localhost:3000/".

Когда вы получаете ошибку

Ошибка: слушай EADDRINUSE

Откройте командную строку и введите следующие инструкции:

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>

после этого перезапустите интерфейс телефона разрыв.

Если вы хотите узнать, какой идентификатор процесса использует PhoneGap, откройте TASK MANAGER, посмотрите на PID заголовка столбца и найдите номер PID.

Вышеупомянутое killall -9 узел, предложенный Патриком, работает как положено и решает проблему, но вы можете прочитать часть этого ответа, посвященную редактированию. kill -9 может быть не лучший способ сделать это.

Кроме того, вы можете захотеть нацелиться на один процесс, а не на вслепую убивать все активные процессы.

В этом случае сначала получите идентификатор процесса (PID) процесса, запущенного на этом порту (скажем, 8888):

lsof -i tcp:8888

Это вернет что-то вроде:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1

(СЛУШАТЬ) Тогда просто сделайте (PS - на самом деле нет. Пожалуйста, продолжайте читать ниже):

kill -9 57385

Это работает на Mac:

Шаг 1.

sudo lsof -i tcp:3000 (or whatever port you want to kill)

Приведенная выше команда даст вам идентификатор процесса, который в данный момент удерживает порт.

Шаг 2.

Kill -9 <pid>

Вы можете изменить свой порт в app.js или в файле конфигурации вашего проекта.

по умолчанию ("порт", 80)

и посмотреть, если порт 80 уже используется, вы можете сделать

netstat -antp | grep 80

netstat -antp | grep node

Вы могли бы хотеть видеть, запущен ли процесс узла или нет.

ps -ef | grep node

и если вы найдете его уже запущенным, вы можете убить его, используя

узел killall

Я создал 2 сервера, прослушивая один и тот же порт 8081, используя один и тот же код во время обучения

1-е создание сервера сработало 2-е создание сервера не удалось с EADDRINUSE

Задержки обратного вызова node.js могут быть причиной неработоспособности, или создание второго сервера имело исключение, и программа закрылась, поэтому 1-й сервер также закрыт

2 Подсказка о проблеме с сервером, которую я получил от: Как исправить ошибку: прослушивать EADDRINUSE при использовании nodejs?

Ошибка: слушайте EADDRINUSE, чтобы решить это в Ubuntu, запустите в терминале netstat -nptl и после этого kill -9 {process-number} эта команда убивает процесс узла, и теперь вы можете попробовать запустить команду node server.js снова

бывший

слушать EADDRINUSE::: 8080

netstat -nptl

tcp6 0 0::: 9000::: * СЛУШАТЬ 9660/ Java
tcp6 0 0::: 5800::: * СЛУШАТЬ -
tcp6 0 0::: 5900::: * СЛУШАТЬ -
tcp6 0 0::: 8080::: * LISTEN 10401 / узел
tcp6 0 0:::20080:::* СЛУШАТЬ 9660/ Java
tcp6 0 0::: 80::: * СЛУШАТЬ -
tcp6 0 0::: 22::: * СЛУШАТЬ -
tcp6 0 0::: 10137::: * СЛУШАТЬ 9660/ Java

убить -9 10401

Я просто удаляю этот (cmd) терминал, открываю другой терминал и снова запускаю node myfile.js

это отлично работает для меня.

ps -ef |grep узел найти app.js, убить pid из app.js

У меня установлен красный узел на моем Mac и Raspberry Pi. Была та же самая проблема, и выполнение 'killall' не помогло. Как только я выключил Raspberry Pi и перезапустил свой компьютер, все заработало нормально.

Сейчас 2022 год, и я нахожусь в Монтерее (пользователь Mac).

      lsof -i tcp:3000
Kill -9 <PID shown in your list>

Просто убейте узел как узел pkill -9 в терминале убанту, чем начальный узел

Любой, кто попробовал все вышеперечисленное, но все еще не может найти процесс румян, попробуйте их все снова, но убедитесь, что вы включили "sudo" перед командами.

Возможно, вы попытались запустить команду npm start на двух разных вкладках. Вы не можете запустить npm start, когда он уже запущен на какой-либо вкладке. Отметьте ее один раз.

Если вам больше нравится пользовательский интерфейс, найдите процесс Node.js в диспетчере задач Windows и убейте его.

В моем случае перезапуск машины решил проблему.

Вам нужно будет убить порт, попытавшись использовать следующую команду на терминале

$ sudo killall -9 nodejs

[Решено]

Возможно, уже слишком поздно, но это работает как шарм.

Тебе нужно pm2 быть установленным

npm install -g pm2

Чтобы остановить текущий работающий сервер (server.js):

pm2 stop -f server.js

Я решил эту проблему, добавив ниже в свой package.json для уничтожения активного ПОРТА - 4000 (в моем случае) Работает на WSL2/Linux/Mac

"scripts": {
    "dev": "nodemon app.js",
    "predev":"fuser -k 4000/tcp && echo 'Terminated' || echo 'Nothing was running on the PORT'",
  }

Источник

Чтобы убить сервер узла, сначала запустите эту команду в своем терминале:

  1. top
  2. откройте другое окно, затем скопируйте сервер id из предыдущего окна: PID number -9 killтак что теперь вы убили свой сервер узлов, попробуйте снова запустить ваше приложение.

Я использовал команду netstat -ano | grep "portnumber" для того, чтобы перечислить номер порта /PID для этого процесса. Затем вы можете использовать taskkill -f //pid 111111 чтобы убить процесс, последним значением будет pid, который вы найдете в первой команде.

Иногда я сталкиваюсь с проблемой перезапуска узла даже после завершения процесса, поэтому мне нужно использовать старый добрый диспетчер задач, чтобы вручную завершить процесс узла.

Другие вопросы по тегам