я тестирую сервер, написанный на 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)
как я могу это исправить без перезагрузки?
Это означает, что адрес, к которому вы пытаетесь привязать сервер, используется. Попробуйте другой порт или закройте программу, используя этот порт.
Бежать:
ps -ax | grep node
Вы получите что-то вроде:
60778 ?? 0:00.62 /usr/local/bin/node abc.js
Затем сделайте:
kill -9 60778
Следующая команда предоставит вам список запущенных процессов узлов.
ps | grep node
Чтобы освободить этот порт, остановите процесс, используя следующее.
kill <processId>
В 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>
Вы получаете ошибку EADDRINUSE
, потому что порт, который хочет использовать ваше приложение, занят другим процессом. Чтобы освободить этот порт, вам нужно прекратить процесс оккупации.
Поскольку вы находитесь в Windows, вы можете завершить процесс с помощью команды Prompt (cmd
). С помощью cmd
вы можете узнать идентификатор процесса (PID) блокирующего приложения. Вам понадобится PID, чтобы завершить/убить процесс.
Вот пошаговое руководство ...
Найдите все процессы, запущенные на указанном порту (в данном примере это «3000»):
netstat -ano | найти ": 3000"
Команда netstat
выведет список всех процессов, запущенных на указанном порту. В последнем столбце результатов netstat
вы можете увидеть PID
s (в данном примере PID - «8308»). Вы можете узнать больше о конкретной переменной PID
, выполнив следующую команду:
список задач/fi "pid eq 8308"
Если вы хотите завершить процесс, вы можете сделать это с помощью следующей команды, используя ее PID
(в этом примере PID равен «8308»):
taskkill/pid 8308/f
Скриншот
Когда вы получаете сообщение об ошибке: слушайте EADDRINUSE,
Попробуйте выполнить следующие команды оболочки:
netstat -a -o | grep 8080
taskkill /F /PID 6204
Я grep
ed для 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)
Одно из возможных решений, которое сработало для меня, было просто закрыть окно в браузере, где у меня был запущен соответствующий скрипт " 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
вы можете изменить свой порт в app.js или в файле конфигурации вашего проекта.
по умолчанию («порт», 80)
и посмотреть, если порт 80 уже используется, вы можете сделать
netstat -antp | grep 80
netstat -antp | узел grep
вы могли бы хотеть видеть, запущен ли процесс узла или нет.
ps -ef | grep node
и если вы найдете его уже запущенным, вы можете убить его, используя
узел killall
Я создал 2 сервера, прослушивая один и тот же порт 8081, используя один и тот же код во время обучения
Создание первого сервера должно быть успешным Создание второго сервера не удалось с EADDRINUSE
задержки обратного вызова node.js могут быть причиной неработоспособности, или создание второго сервера имело исключение, и программа закрылась, поэтому 1-й сервер также закрыт
2 Подсказка о проблеме с сервером, полученная от: Как исправить ошибку: прослушивать EADDRINUSE при использовании nodejs?
Это работает на Mac:
Шаг 1.
Sudo lsof -i tcp:3000 (or whatever port you want to kill)
Вышеприведенная команда даст вам идентификатор процесса, который в данный момент удерживает порт.
Шаг 2.
Kill -9 <pid>
Ошибка: прослушайте 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
просто убейте узел as pkill -9 узел в терминале убанту чем начальный узел
ps -ef | grep node find app.js, kill pid из app.js
Чтобы убить сервер узла, сначала запустите эту команду в своем терминале:
top
id
из предыдущего окна: PID number -9 kill
so, теперь вы убили свой сервер узлов, попробуйте снова запустить приложение.В моем случае перезапуск машины решил проблему.
Любой, кто попробовал все вышеперечисленное, но все еще не может найти процесс румян, попробуйте их все снова, но убедитесь, что вы включили «Sudo» перед командами.
У меня установлен красный узел на моем Mac и Raspberry Pi. Была та же самая проблема, и выполнение 'killall' не помогло. Как только я выключил Raspberry Pi и перезапустил свой компьютер, все заработало нормально.
Возможно, вы попытались запустить команду npm start на двух разных вкладках. Вы не можете запустить npm start, когда он уже запущен на какой-либо вкладке. Отметьте ее один раз.
Если вам больше нравится пользовательский интерфейс, найдите процесс Node.js в диспетчере задач Windows и убейте его.