dừng tất cả các phiên bản của máy chủ node.js


186

Đây là lần đầu tiên tôi làm việc với Node.js và tôi gặp phải vấn đề này:

Tôi đã bắt đầu một máy chủ Node thông qua plugin của IDE. Thật không may, tôi không thể sử dụng thiết bị đầu cuối của IDE. Vì vậy, tôi đã cố gắng chạy tập lệnh từ dòng lệnh.

Đây là vấn đề - Tôi đang sử dụng mô-đun Express và ứng dụng của tôi đang lắng nghe một số cổng (8080). Khi tôi khởi động ứng dụng từ dòng lệnh, nó sẽ báo lỗi này:

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

Mặc dù tôi không chắc chắn lỗi này có thể là gì nhưng tôi cho rằng đó là do ứng dụng đang nghe trên một cổng đã được sử dụng. Tôi cũng vậy:

netstat -an

tôi có thể thấy

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

Đó là vì máy chủ Node đã được khởi động khi tôi cố gắng khởi động nó từ IDE.

Vì vậy, tôi muốn biết, làm thế nào tôi có thể dừng tất cả các trường hợp máy chủ? Ngoài ra nếu bạn có thể cho tôi biết cách phát hiện những gì đang chạy trên một cổng và tiêu diệt nó.


1
Xin lỗi tôi không đề cập rằng tôi đang ở trên môi trường windows. Xin vui lòng gửi các lệnh có liên quan. Cảm ơn
Kiran Ambati

và bạn cũng có thể tìm thấy tác vụ node.js trong windows taskmanager. tìm tiến trình có tên là Node.js: Phía máy chủ ... và mở thông tin chi tiết, bạn sẽ tìm thấy thông tin chi tiết về tiến trình nodejs của mình
Xiuying Lan

Đây là một trong những công việc cho tôi: superuser.com/questions/1183057/ từ
biết

Câu trả lời:


422

Máy Windows:

Cần tiêu diệt máy chủ Node.js và bạn không có bất kỳ quy trình Node nào khác đang chạy, bạn có thể yêu cầu máy của mình hủy tất cả các quy trình được đặt tên node.exe. Điều đó sẽ trông như thế này:

taskkill /im node.exe

Và nếu các quy trình vẫn tồn tại, bạn có thể buộc các quy trình chấm dứt bằng cách thêm /fcờ:

taskkill /f /im node.exe

Nếu bạn cần kiểm soát chi tiết hơn và chỉ cần giết một máy chủ đang chạy trên một cổng cụ thể, bạn có thể sử dụng netstatđể tìm ID tiến trình, sau đó gửi tín hiệu tiêu diệt tới nó. Vì vậy, trong trường hợp của bạn, nơi có cổng 8080, bạn có thể chạy như sau:

C:\>netstat -ano | find "LISTENING" | find "8080"

Cột thứ năm của đầu ra là ID tiến trình:

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

Sau đó bạn có thể giết quá trình với taskkill /pid 14828. Nếu quá trình từ chối thoát, thì chỉ cần thêm /ftham số (lực) vào lệnh.


Máy Linux:

Quá trình gần như giống hệt nhau. Bạn có thể tắt tất cả các quy trình Node đang chạy trên máy (sử dụng -$SIGNALnếu SIGKILLkhông đủ):

killall node

Hoặc cũng bằng cách sử dụng netstat, bạn có thể tìm thấy PID của một quá trình lắng nghe trên một cổng:

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

ID tiến trình trong trường hợp này là số trước tên quy trình trong cột thứ sáu, sau đó bạn có thể chuyển sang killlệnh:

$ kill 1073

Nếu quá trình từ chối thoát, thì chỉ cần sử dụng -9cờ, đó là một SIGTERMvà không thể bỏ qua:

$ kill -9 1073

1
xin lỗi, làm thế nào chính xác tôi có thể sử dụng các lệnh này? process.exit () có thể nằm trong mã? nhưng máy chủ đã được khởi động. Có khả năng là nó được bắt đầu với nút lệnh app.js chứ không phải nút-dev app.js. Và "nút killall" không hoạt động. Tôi đang làm sai à? Cảm ơn bạn
Kiran Ambati

1
process.exit()trong ứng dụng của bạn làm cho cá thể NodeJS đóng lại. killall nodetrong bash sẽ giết tất cả các phiên bản NodeJS đang chạy trên máy của bạn.
hexacyanide

cảm ơn @hexacyanide. Tôi đang phát triển trên windows. Điều đó có làm cho nút killall trở thành một lệnh không hợp lệ vì tôi không thể sử dụng nó từ dòng lệnh.
Kiran Ambati

3
Hãy thử taskkill /IM node.exe. Nó sẽ giết tất cả các quá trình được đặt tên node.exe.
hexacyanide

1
Tôi đã phải sử dụng taskkill / F / IM node.exe để làm cho nó hoạt động, cảm ơn!
Luis

75

Cách nhanh nhất là

killall node

Hoạt động với Linux, OS X


Phương pháp dễ dàng nhưng nếu bất kỳ ứng dụng nào khác đang chạy thì chúng ta phải cụ thể hơn.
Rajeev Uppala

không làm việc cho tôi. node: no process foundNgoài ra khi tôi grep cho một tiến trình nút chạy trên cổng cụ thể, ID tiến trình có -thay vì chính một số.
Giorgi Gvimradze

49

Bạn có thể sử dụng lsoflấy quy trình đã ràng buộc với cổng yêu cầu.

Thật không may, các cờ dường như khác nhau tùy theo hệ thống, nhưng trên Mac OS X, bạn có thể chạy

lsof -Pi | grep LISTEN

Ví dụ, trên máy của tôi, tôi nhận được một cái gì đó như:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

Số thứ hai là PID và cổng mà họ đang nghe nằm ở bên phải trước "(LISTEN)". Tìm PID lừa đảo và kill -9 $PIDchấm dứt với định kiến ​​cực đoan.


Xin chào Jacob, xin vui lòng bạn có thể chỉnh sửa câu trả lời và thêm phiên bản windows vì tôi đang phát triển trên windows. Cảm ơn bạn
Kiran Ambati

Tôi không biết làm thế nào để làm điều đó trên Windows, xin lỗi Kiran.
Jacob Groundwater

Đây là một câu trả lời tuyệt vời, đặc biệt là khi có nhiều máy chủ nút chạy trên các cổng khác nhau. Tôi có thể dễ dàng phân biệt ID tiến trình đang chạy trên mỗi cổng.
modulitos

25

Windows & GitBash Terminal Tôi cần sử dụng lệnh này bên trong thiết bị đầu cuối Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"

3
Điều này đã làm điều đó cho tôi. Cảm ơn
Adim Victor

1
Điều này đã làm điều đó cho tôi là tốt. Tôi tìm thấy cách nhanh nhất để tiêu diệt tất cả các quy trình nút trên Windows.
Asad

16

nếu bạn muốn giết một quá trình nút cụ thể, bạn có thể đi đến tuyến đường lệnh và gõ:

ps aux | grep node

để có được một danh sách tất cả các id quá trình nút. bây giờ bạn có thể lấy id tiến trình của mình (pid), sau đó làm:

kill -9 PID

và nếu bạn muốn giết tất cả các quy trình nút thì hãy:

killall -9 node

Công tắc -9 giống như tác vụ kết thúc trên windows. nó sẽ buộc quá trình kết thúc bạn có thể làm:

kill -l

để xem tất cả các công tắc của lệnh kill và bình luận của họ.


8

Bạn có thể thử điều này:

taskkill /IM node.exe -F

7

Linux

Để gây ấn tượng với bạn bè của bạn

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

Nhưng đây là người bạn sẽ nhớ

killall node


2

Nếu bạn đang sử dụng Windows, hãy làm theo điều này:

  1. Mở trình quản lý tác vụ, tìm quy trình này: Trình quản lý tác vụ hiển thị quy trình Node - JavaScript phía máy chủ Node.js

  2. Sau đó chỉ cần nhấp chuột phải và "Kết thúc nhiệm vụ" nó.

  3. Đó là nó, bây giờ tất cả các lệnh npm chạy từ đầu.


1

Đa nền tảng, ổn định, giải pháp tốt nhất:

sử dụng fkill để giết tiến trình lấy cổng của bạn:

fkill -f :8080

Để cài đặt lệnh fkill, sử dụng lệnh: npm i -g fkill


1

bạn co thể thử

killall node

bạn cũng có thể thử

killall nodejs

Các lệnh này đã được đăng nhiều lần. Bạn có thể đăng lại chúng một lần nữa, nhưng sau đó, ít nhất bạn nên thêm một số lời giải thích cho câu trả lời của mình để người khác có thể học hỏi từ nó
Nico Haase


0

Đang sử dụng windows Hệ điều hành.

Tôi đã giết tất cả quá trình nút và khởi động lại ứng dụng mà nó hoạt động.

thử

taskkill /im node.exe

0

Sử dụng lệnh sau để giết và khởi động lại máy chủ nút từ tệp bó

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


-3

Nhấn vào cmd hoặc bash: Ctrl + C


Điều này chỉ hoạt động trong chế độ xem thiết bị đầu cuối với quá trình nút đang chạy và không đảm bảo sẽ giết quá trình.
Thiết kế của Adrian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.