У меня есть простой TCP-сервер, который прослушивает порт.
var net = require("net");
var server = net.createServer(function(socket) {
socket.end("Hello!\n");
});
server.listen(7777);
Я начинаю это с node server.js
и затем закрываю это с Ctrl + Z на Mac. Когда я пытаюсь запустить его снова с, node server.js
я получаю это сообщение об ошибке:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)
Я неправильно закрываю программу? Как я могу предотвратить это?
fg
после Ctrl-Z, вы вернетесь туда, где остановились. Итак, ваш предыдущий узел все еще работает. Остерегайтесь, если вы делаете это для других команд!Ctrl+Z
действие, правильная методология может состоять в том,fg
чтобы оживить процесс, а затемCtrl+C
убить его должным образом.Ответы:
Чтобы завершить программу, вы должны использовать Ctrl+ C. Если вы сделаете это, он отправит сообщение
SIGINT
, что позволит программе корректно завершить работу, отменяя привязку со всех портов, которые она прослушивает.Смотрите также: https://superuser.com/a/262948/48624
источник
Ctrl + C
не работает для меня. Только^C
набирается в консоли, и программа не выходит.Ctrl+C
работает отлично. В любом случае, это отдельная проблема от вашей реальной проблемы. Вы должны опубликовать вопрос «Ctrl + C не работает» на SuperUser.com.kill -9
, но я бы не стал. Вы действительно уверены, что ваше приложение все еще остается открытым? У меня никогда не было этой проблемы. Как только мое приложение заканчивается, соединения всегда немедленно прекращаются. Я бы использовал netstat, чтобы определить, задерживается ли ваше приложение или что-то еще на этом порту.Ctrl+ Zприостанавливает его, что означает, что он все еще может быть запущен.
Ctrl+ на Cсамом деле убьет его.
Вы также можете убить его вручную следующим образом:
Найдите идентификатор процесса (второй слева):
Это также может работать
источник
killall node
в своем ответе, так как это действительно самый простой и надежный вариант (если вы в порядке с убийством всех случаев)Или же вы можете сделать все это в одной строке:
Вы можете заменить узел внутри '\ snode \ s' любым другим именем процесса.
источник
Возобновить и убить процесс:
Ctrl+ Zприостанавливает его, что означает, что он все еще работает как приостановленный фоновый процесс.
Вы, вероятно, сейчас в терминале подсказки ...
Дайте команду
fg
возобновить процесс на переднем плане.нажмите Ctrl+, Cчтобы правильно убить его.
Кроме того, вы можете убить его вручную следующим образом:
( ПРИМЕЧАНИЕ: следующие команды могут требовать root,
sudo ...
как и ваш друг)или, если у вас нет pkill, это может сработать:
или возможно это:
иногда процесс перечисляет свой собственный grep, в этом случае вам понадобится:
,
h / t @ruffin из комментариев к самому вопросу. У меня была такая же проблема, и его комментарий помог мне решить ее самостоятельно.
источник
Вы можете напечатать,
.exit
чтобы выйти из узла JS REPLисточник
Если вы используете Node.js в интерактивном режиме (REPL):
Ctrl+ Cвернет вас к> приглашению и наберет:
или просто используйте Ctrl+ D.
источник
$ sudo killall node
в другом терминале работает на mac , покаkillall node
не работает:источник
на Linux попробуйте:
pkill node
на окнах:
или
источник
Хотя это поздний ответ, я нашел его в документации по NodeJS :
Таким образом, чтобы подвести итог вы можете выйти по:
.exit
в nodejs РЕПЛ.<ctrl>-C
дважды.<ctrl>-D
.process.exit(0)
что означает естественный выход из REPL. Если вы хотите вернуть любой другой статус, вы можете вернуть ненулевое число.process.kill(process.pid)
это способ убить, используя nodejs api из вашего кода или из REPL.источник
Я добавляю этот ответ, потому что для многих проектов с производственными развертываниями у нас есть сценарии, которые останавливают эти процессы, поэтому нам не нужно это делать.
Чистый способ управления процессами Node Server - использование
forever
пакета (изNPM
).Пример:
Установите навсегда
npm install forever -g
Запустить Node Server
forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js
Результат:
info: Forever processing file: server.js
Узел выключения сервера
forever stop server.js
результат
info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247
Это приведет к чистому завершению работы вашего серверного приложения.
источник
Если вы хотите остановить свой сервер
npm stop
или что-то вроде этого. Вы можете написать код, который убивает ваш серверный процесс:Проверьте эту ссылку для деталей: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5
источник
Я столкнулся с проблемой, когда у меня работает несколько серверов узлов , и я хочу просто убить один из них и повторно развернуть его из скрипта.
Примечание. Этот пример находится в оболочке bash на Mac.
Для этого я должен сделать свой
node
звонок как можно более конкретным. Например, вместо того, чтобы звонитьnode server.js
из каталога приложений, я звонюnode app_name_1/app/server.js
Тогда я могу убить его, используя:
kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')
Это убьет только процесс узла, выполняющий app_name_1 / app / server.js.
Если ты побежал
node app_name_2/app/server.js
этот узел, процесс продолжит работу.Если вы решите, что хотите убить их, вы можете использовать их,
killall node
как уже упоминали другие.источник
Поздний ответ, но в Windows, открытие диспетчера задач с помощью CTRL + ALT + DEL, а затем уничтожение процессов Node.js решит эту ошибку.
источник
Вы можете использовать следующую команду, чтобы быть конкретным в уничтожении локального сервера (здесь: 8000)
Это даст вам следующие группы TCP:
Это убьет processId, соответствующий TCP *: 8000
источник
Для MacOS
Запустите приведенный ниже код и нажмите Enter
источник
Вы можете использовать фьюзер, чтобы получить то, что вы хотите сделать.
Для получения идентификаторов процессов задач, выполняемых на порту, вы можете сделать:
Допустим, порт 8888, команда становится:
А чтобы убить процесс, работающий в порту, просто добавьте ключ -k.
Пример (порт 8888):
Это оно! Это закроет процесс прослушивания порта. Я обычно делаю это перед запуском моего серверного приложения.
источник
Мой пример использования: на MacOS запускать / перезапускать серверы нескольких узлов на разных портах из скрипта
запустить :
"cd $PATH1 && node server1.js & cd $PATH2 && node server2.js & ..."
стоп1 :
"kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk '{print $2}')"
стоп2, стоп3 ...
перезапустить :
"stop1 & stop2 & ... & stopN ; run
для получения дополнительной информации о поиске процесса по порту: кто прослушивает данный порт TCP в Mac OS X?
источник
Для Windows сначала найдите PID с вашим номером порта
После этого убейте задачу, убедитесь, что вы находитесь в корне вашего диска "c", и команда будет
taskkill /F /PID your pid
источник
если вы используете VS Code и терминал, сначала выберите ниспадающий узел справа, а затем нажмите Ctrl + C. Затем он будет работать
Нажмите y, когда вам будет предложено.
Спасибо
источник