it-swarm.xyz

как освободить локальный хост из 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)

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

103
adam

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

91
fent

Бежать:

ps -ax | grep node

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

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

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

kill -9 60778
153
Komposr

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

ps | grep node

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

kill <processId>
35
wcurtis

В 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>
34
WolfReporter

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

Поскольку вы находитесь в Windows, вы можете завершить процесс с помощью команды Prompt (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

Скриншот

 enter image description here

21
Benny Neugebauer

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

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

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

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

19
swathy valluri

предположим, ваш сервер работает на 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

14
Arun Kasyakar

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

kill -9 $(lsof -t -i:3000)
8
Atta Ur Rahman

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

7
iloo

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

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

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

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

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

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

6
Eshan Chattaraj

Вышеупомянутый узел 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
4
Hemant Raghuwanshi

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

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

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

netstat -antp | grep 80

netstat -antp | узел grep

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

ps -ef | grep node

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

узел killall

2
Adeel Ahmad

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

Создание первого сервера должно быть успешным Создание второго сервера не удалось с EADDRINUSE

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

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

1
Manohar Reddy Poreddy

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

Sudo lsof -i: 8081

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

Sudo kill -9 2925

 enter image description here

1
Surender Kumar

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

Шаг 1. 

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

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

Шаг 2. 

Kill -9 <pid>
1
saran3h

Ошибка: прослушайте 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 ::: * LISTEN -
tcp6 0 0 ::: 8080 ::: * LISTEN 10401/узел
tcp6 0 0 ::: 20080 ::: * LISTEN 9660/Java
tcp6 0 0 ::: 80 ::: * СЛУШАТЬ -
tcp6 0 0 ::: 22 ::: * СЛУШАТЬ -
tcp6 0 0 ::: 10137 ::: * LISTEN 9660/Java 

убить -9 10401

1
navnit kapadiya

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

0
Aditya Prakash

ps -ef | grep node find app.js, kill pid из app.js

0
megan5

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

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

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

0
Balram Singh

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

0
MMMTroy

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

0
alkopop79

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

0
Bhudke Aakshayy

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

0
PolinaC