2012-06-30 26 views
13

Tôi đang cố gắng thiết lập một hệ thống xây dựng cho Node.js trên tuyệt vời, vì vậy tôi có thể nhấn F7 để gọi "nút" trên tệp được mở. Vấn đề là quá trình này sau đó được mở mãi mãi, vì vậy, lần thứ hai tôi sử dụng F7 tôi nhận được một add-in-sử dụng.Làm thế nào để giết một quá trình mở trên node.js?

Có cách nào tôi có thể giết quá trình "node.exe" được mở từ node.js không?

+0

Bản sao có thể có của [ngừng tất cả các phiên bản của máy chủ node.js] (http://stackoverflow.com/questions/14790910/stop-all-instances-of-node-js-server) – rofrol

Trả lời

29

Sử dụng các thiết lập sau các lệnh để xác định tiến trình đang chạy trên một cổng nhất định và để termiate nó từ dòng lệnh

sudo fuser -v 5000/tcp // gives you the process running on port 5000 

Nó sẽ chi tiết đầu ra tương tự như một trong những hình dưới đây

     USER  PID ACCESS COMMAND 
    5000/tcp:   almypal  20834 F.... node 

Sau đó, sử dụng

sudo fuser -vk 5000/tcp 

để chấm dứt quá trình. Hãy kiểm tra lại một lần nữa bằng cách sử dụng

sudo fuser -v 5000/tcp 

để đảm bảo rằng quá trình đã chấm dứt.

Trên Windows bạn có thể sử dụng các bước sau

C:\> tasklist // will show the list of running process' 

    Image Name  PID Session Name Session# Mem Usage 
    System   4 console     0 236 K 
    ... 
    node.exe   3592 console    0 8440 k 

Lưu ý PID tương ứng với quá trình nút của bạn, trong trường hợp này 3592. Tiếp theo chạy taskkill để chấm dứt quá trình này.

C:\> taskkill /F /PID 3592 

Hoặc/IM chuyển

C:\> taskkill /F /IM node.exe 
+2

Câu trả lời hay nhưng ... và cho Windows? – MaiaVictor

+0

Đã cập nhật câu trả lời với các chi tiết cho Windows. – almypal

+0

Cũng chỉ nhận thấy không chính xác những gì tôi đã yêu cầu nhưng các lệnh có thể được sử dụng từ node.js và nếu bạn thay đổi chúng một chút (từ id quá trình thành tên proccess) nó làm những gì tôi hỏi, vì vậy đây là câu trả lời hay nhất tôi có . – MaiaVictor

2

Từ bên trong Node.js:

var die = function(quitMsg) 
{ 
    console.error(quitMsg) 
    process.exit(1); 
} 

die('Process quit'); 

Có một số methods available cho thoát ra rằng chỉ có sẵn cho POSIX (tức là không phải Windows) mà sẽ thoát khỏi quá trình bằng id tiến trình của nó.

Ngoài ra, lưu ý rằng bạn có thể có thể gửi một kill() tín hiệu sử dụng phương pháp này, mà không nói nó không có sẵn cho Windows:

process.kill(pid, [signal]) 
+0

Nhưng làm cách nào để biết pid của node.exe đang chạy khác? – MaiaVictor

+0

@Dokkat 'console.log ('Quá trình này là pid' + process.pid);' sẽ in pid từ Node.exe khác, sau đó bạn thực hiện lệnh mới với đối số dòng lệnh của pid của quá trình đó và trong kịch bản mới bạn gửi 'SIGTERM' vào pid bạn có trong' argv'. Tất cả các thông tin có sẵn trong liên kết ở trên. –

+1

@Viclib nếu bạn vẫn còn quan tâm, tôi thực sự chạy vào vấn đề cụ thể này, và sử dụng 'process.kill (pid, [signal])' là tất cả những gì tôi cần. Tôi có thể cung cấp thêm thông tin nếu bạn muốn. –

0

Nếu tuyệt vời bạn nói là Plugin sublimeText, tôi có cùng một vấn đề, và gửi máy chủ TCP nhắn 'tắt' từ mã python, sau đó

app.js

TCPserver 
     .on('connection', function(socket) 
     { 
      socket.pipe(require('through') 
       (function(data) 
       { //---------------------------- 
        if (data.toString() === 'shutdown') 
        { 
         process.exit(); 
        } 
        //-------------------------- 
       })); 
      socket.end(); 
     }) 
0

Simil arly những gì @ Alex W nói, bạn có thể gửi một tín hiệu kill để quá trình này chừng nào bạn có quá trình ID của nó, hoặc PID sử dụng chức năng nút sau:

process.kill(pid, [signal])

Trong trường hợp của tôi, tôi đã có PID có sẵn như tôi đã sinh sản child_process().spawn.pid. Tôi đã thử nghiệm nó và nó hoạt động trên Win 7 x64.

Các vấn đề liên quan