Как освободить локальный хост из 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, чтобы завершить / убить процесс.
Вот пошаговое руководство...
Найдите все процессы, запущенные на указанном порту (в данном примере это "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
Ред для 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
Это работает на 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
это отлично работает для меня.
У меня установлен красный узел на моем 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'",
}
Чтобы убить сервер узла, сначала запустите эту команду в своем терминале:
top
- откройте другое окно, затем скопируйте сервер
id
из предыдущего окна:PID number -9 kill
так что теперь вы убили свой сервер узлов, попробуйте снова запустить ваше приложение.
Я использовал команду netstat -ano | grep "portnumber"
для того, чтобы перечислить номер порта /PID для этого процесса. Затем вы можете использовать taskkill -f //pid 111111
чтобы убить процесс, последним значением будет pid, который вы найдете в первой команде.
Иногда я сталкиваюсь с проблемой перезапуска узла даже после завершения процесса, поэтому мне нужно использовать старый добрый диспетчер задач, чтобы вручную завершить процесс узла.