Węzeł Stop.program js z linii poleceń
Mam prosty serwer TCP, który nasłuchuje na porcie.
var net = require("net");
var server = net.createServer(function(socket) {
socket.end("Hello!\n");
});
server.listen(7777);
Zaczynam od node server.js
, a następnie zamykam za pomocą Ctrl + Z na Macu. Kiedy próbuję uruchomić go ponownie z node server.js
pojawia się komunikat o błędzie:
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)
Czy zamykam program w niewłaściwy sposób? Jak Mogę temu zapobiec? 13 answers
Aby zakończyć program, należy użyć Ctrl + C . Jeśli to zrobisz, wysyła SIGINT
, co pozwala programowi zakończyć się z wdziękiem, odłączając się od wszystkich portów, na których nasłuchuje.
Zobacz też: https://superuser.com/a/262948/48624
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 10:18:16
Ctrl+Z zawiesza go, co oznacza, że nadal może działać.
Ctrl+C naprawdę go zabije.
Można go również zabić ręcznie w ten sposób:
ps aux | grep node
Znajdź identyfikator procesu (drugi od lewej):
kill -9 PROCESS_ID
To może również działać
killall node
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 14:43:23
Lub alternatywnie możesz zrobić to wszystko w jednej linii:
kill -9 $(ps aux | grep '\snode\s' | awk '{print $2}')
Możesz zastąpić węzeł wewnątrz '\ snode\s' dowolną inną nazwą procesu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-22 15:44:32
Możesz wpisać .exit
aby zamknąć węzeł JS REPL
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-22 10:12:09
Jeśli używasz Node.js interactive (the REPL):
Ctrl + C przeniesie cię z powrotem do > prompt, a następnie wpisz:
process.exit()
Lub po prostu użyj Ctrl + D .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-07 15:38:43
$ sudo killall node
w innym terminalu działa na mac , natomiast killall node
nie działa:
$ killall node
No matching processes belonging to you were found
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 12:53:26
Wznów i zakończ proces:
Ctrl+z zawiesza go, co oznacza, że nadal działa jako zawieszony proces w tle.
prawdopodobnie jesteś teraz na monicie terminala...
Polecenie
fg
, Aby wznowić proces na pierwszym planie.Type Ctrl+C , aby go właściwie zabić.
Alternatywnie, można go zabić ręcznie jak to:
(Uwaga: poniższe polecenia mogą wymagać roota, więc sudo ...
jest twoim przyjacielem)
pkill -9 node
Lub, jeśli nie masz pkill, może to zadziałać:
killall node
A może to:
kill $(ps -e | grep node | awk '{print $1}')
Czasami proces wyświetli własny grep, w takim przypadku będziesz potrzebował:
kill $(ps -e | grep dmn | awk '{print $2}')
.
H / t @ruffin z komentarzy do samego pytania. Miałem ten sam problem i jego komentarz pomógł mi rozwiązać go osobiście.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-26 21:48:40
Choć jest to późna odpowiedź, znalazłem to z NodeJS docs:
Zdarzenie' exit 'jest emitowane, gdy REPL jest wyłączony przez odebranie
.exit
jako wejście, przez dwukrotne naciśnięcie<ctrl>-C
, aby sygnalizować SIGINT, lub przez naciśnięcie<ctrl>-D
, aby sygnalizować' end ' w strumieniu wejściowym. Wywołanie zwrotne listener jest wywoływane bez żadnych argumentów.
Więc podsumowując można wyjść przez:
- wpisując {[0] } W nodejs REPL.
- naciśnięcie
<ctrl>-C
dwa razy. - naciśnięcie
<ctrl>-D
. -
process.exit(0)
czyli naturalne wyjście z REPL. Jeśli chcesz zwrócić inny status, możesz zwrócić liczbę niezerową. -
process.kill(process.pid)
jest sposobem zabijania przy użyciu api nodejs z kodu lub z REPL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-06 22:22:10
Na Linuksie spróbuj: pkill node
W systemie windows:
Taskkill /IM node.exe /F
Lub
from subprocess import call
call(['taskkill', '/IM', 'node.exe', '/F'])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 18:26:21
Jeśli chcesz zatrzymać serwer npm stop
lub coś takiego. Możesz napisać kod, który zabija proces serwera jako:
require('child_process').exec(`kill -9 ${pid}`)
Sprawdź ten link dla szczegółów: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-31 03:06:12
Napotkałem problem, w którym mamuruchomionych wiele serwerów węzłów i chcępo prostu zabić jednego z nich i ponownie pobrać go ze skryptu.
Uwaga: Ten przykład znajduje się w powłoce bash na Macu.
Aby to zrobić, upewniam się, że mój telefonnode
jest jak najbardziej szczegółowy. Na przykład zamiast wywoływać node server.js
z katalogu apps, wywołuję node app_name_1/app/server.js
Wtedy mogę go zabić używając:
kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')
To zabije tylko uruchomiony proces węzła app_name_1 / app / server.js.
Jeśli uruchomiłeś node app_name_2/app/server.js
ten proces węzła będzie nadal działał.
Jeśli zdecydujesz, że chcesz ich wszystkich zabić, możesz użyć killall node
, Jak wspominali inni.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 02:51:20
Dodaję tę odpowiedź, ponieważ dla wielu projektów z wdrożeniami produkcyjnymi mamy skrypty, które zatrzymują te procesy, więc nie musimy.
Czystym sposobem zarządzania procesami serwera węzłów jest użycie pakietu forever
(z NPM
).
Przykład:
Install Forever
npm install forever -g
Uruchom Serwer Węzła
forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js
Wynik:
info: Forever processing file: server.js
Węzeł Zamykania Serwer
forever stop server.js
Wynik
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
Spowoduje to całkowite zamknięcie aplikacji serwera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-08 18:40:00
Mój przypadek użycia: na MacOS Uruchom / rerun wiele serwerów węzłów na różne porty ze skryptu
Bieg: "cd $PATH1 && node server1.js & cd $PATH2 && node server2.js & ..."
Stop1: "kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk '{print $2}')"
Stop2, stop3...
Rerun: "stop1 & stop2 & ... & stopN ; run
Aby uzyskać więcej informacji na temat znajdowania procesu przez port: Kto nasłuchuje na danym porcie TCP w Mac OS X?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-07 16:47:29