Quá trình thoát nodejs

Có thể quy trình Node chưa kết thúc đúng cách và bạn không biết gì?

Trong bài viết này, tôi sẽ chỉ cho bạn cách chấm dứt Node. js xử lý bằng 2 phương thức khác nhau và giải thích trạng thái mã thoát khi chấm dứt Nút. quy trình js

tiến trình. exit() sẽ buộc một Nút. chấm dứt quá trình js

Bạn có thể đã thấy điều này thường xuyên trong Node. dự án js


process.exit();


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exit(1); // Don't care, we're shutting down
0 là lệnh phổ biến nhất để kết thúc một Nút. quy trình js


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exit(1); // Don't care, we're shutting down
0 sẽ cố gắng nhanh chóng kết thúc quá trình ngay cả khi các cuộc gọi không đồng bộ chưa hoàn thành


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exit(1); // Don't care, we're shutting down

tiến trình. danh sách mã trạng thái exit()

Trong các ví dụ trên, bạn có thể đã thấy tôi thêm


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exit(1); // Don't care, we're shutting down
2 làm đối số


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exit(1); // Don't care, we're shutting down
0 chấp nhận các đối số chỉ là mã trạng thái hoặc trong trường hợp này là mã thoát

Đây là danh sách các mã thoát và chức năng của chúng

Mã thoát 0

Mã thoát 0 cho phép Node. js biết chấm dứt khi không còn hoạt động không đồng bộ nào xảy ra


process.exit();

Đó là quy trình mã thoát mặc định. exit() sử dụng khi không có gì được truyền vào hàm. Bạn cũng có thể vượt qua 0


process.exit(0);

Mã thoát 1

Mã thoát 1 dành cho khi xảy ra trường hợp ngoại lệ nghiêm trọng chưa được xử lý mà miền không xử lý

________số 8_______


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exit(1); // Don't care, we're shutting down
0 là một trong những phương thức cho Node. js để chấm dứt một quá trình. Có một cách tiếp cận khác và an toàn hơn để chấm dứt một Nút. quy trình js

Mã thoát 2

Mã thoát này được Bash dành riêng cho việc sử dụng sai


process.exit(2);

Mã thoát 3

Nút. js mã thoát 3 dành cho mã trạng thái khi không thể phân tích cú pháp mã nội bộ. Mã này chỉ dành cho mục đích phát triển


process.exit(3);

Mã thoát 4

Nút. js mã thoát 4 hiếm khi xảy ra và chỉ dành cho phát triển. Mã thoát này xảy ra khi mã nguồn JavaScript của bạn không trả về giá trị hàm


process.exit(4);

Mã thoát 5

Mã thoát 5 dành cho các lỗi nghiêm trọng. Điều này xảy ra khi động cơ V8 không thể phục hồi


process.exit(5);

quá trình sử dụng. exitCode để chấm dứt Node một cách an toàn. quy trình js


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exit(1); // Don't care, we're shutting down
5 cho phép Nút. js kết thúc một cách tự nhiên và tránh quy trình Node thực hiện thêm công việc xung quanh lập lịch vòng lặp sự kiện


fetchCatData('fluffikins'); // I'm still waiting for the content!
process.exitCode = 1; // Great, I'll wait till you're done.

Oh wow, bạn đã làm được đến mức này rồi. Nếu bạn thích bài viết này, có thể thích hoặc đăng lại chủ đề trên Twitter

Tôi thích tweet về Node. js và đăng các đoạn mã hữu ích. Theo tôi ở đó nếu bạn cũng muốn một số

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn các cách khác nhau để thoát khỏi Node. chương trình js. Trước tiên, bạn cần hiểu rằng Node. js hoạt động trên một luồng hoặc quy trình chính. Bạn có thể sinh ra các tiến trình con bổ sung để xử lý thêm công việc. Thoát khỏi quy trình chính cho phép chúng tôi thoát khỏi Nút

Mặc dù có nhiều cách để thoát khỏi Node, nhưng một số cách tốt hơn những cách khác trong một số trường hợp nhất định, chẳng hạn như nếu bạn đang chạy REPL hay không. Chúng tôi sẽ giải thích điều này chi tiết hơn trong suốt bài viết

Để một tập lệnh thoát hoàn toàn

Thoát khỏi một nút. chương trình js bắt đầu tại dòng lệnh có thể đơn giản như đợi tập lệnh thực thi xong. Ngầm định, nút. js sẽ thoát khi đến cuối tập lệnh

Bạn có thể thấy điều này bằng cách chạy đoạn script sau

Chạy chương trình với lệnh node batman.js, bạn sẽ thấy nó xuất ra câu lệnh đầu tiên về Batman. Ngoài ra, lệnh gọi lại "thoát" kích hoạt, dẫn đến việc in ra thông báo về việc thoát và mã thoát. Bạn sẽ thấy một cái gì đó tương tự như sau

$ node batman.js 
Batman begins
About to exit with code 0

Lưu ý rằng các sự kiện và vòng lặp đang chờ xử lý sẽ chặn thoát chương trình. Thêm chức năng lặp lại này vào cuối tập lệnh trên

Chạy lại. Lần này, chương trình không thoát, vì hàm setInterval lặp lại chặn Nút. js thoát. Đầu ra của bạn sẽ trông giống như thế này

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...

Trường hợp "Tôi là Người Dơi. " cụm từ được in liên tục cho đến khi bạn thoát mạnh, như với Ctrl + C hoặc đóng thiết bị đầu cuối của bạn

Quy trình sử dụng. lối ra()

Chúng ta có thể thoát khỏi Node. các chương trình js sử dụng lệnh gọi hàm process.exit rõ ràng. Hàm process.exit thoát khỏi Nút hiện tại. quy trình js. Nó nhận một mã thoát, là một số nguyên

Đối tượng

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
0 là một biến toàn cục cho phép chúng ta quản lý Node hiện tại. quy trình js. Vì nó là toàn cầu nên chúng ta có thể truy cập nó từ bất cứ đâu trong Node. js mà không cần sử dụng
$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
1 để nhập nó

Hãy để chúng tôi cập nhật chương trình cuối cùng không thoát do hàm setInterval. Lần này, chúng tôi sẽ buộc nó thoát ra bằng cách sử dụng

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
3 sau 5 giây. Thêm chức năng sau vào cùng 'người dơi. js' từ trước đó

Khi bạn chạy node batman.js, bạn sẽ nhận thấy rằng lần này, chương trình chạy trong một khoảng thời gian giới hạn và sau đó thoát ra với mã thoát là 22

node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22

Sử dụng process.exit hoạt động để thoát khỏi REPL (mà chúng ta sẽ thấy sau) cũng như để kết thúc Node đang chạy. chương trình hoặc tập lệnh js

Nút. js diễn giải các mã khác 0 là lỗi và mã thoát 0 là thành công

Nút thoát. js sử dụng quy trình. giết chết()

Chúng ta cũng có thể thoát khỏi Node. js sử dụng

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
6 để tắt Node đang chạy. quy trình js. Sự khác biệt giữa điều này và process.exit
$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
6 lấy pid hoặc id tiến trình của tiến trình mà chúng ta muốn hủy, cũng như một tín hiệu tùy chọn mà chúng ta muốn gửi đến tiến trình. Điều này có nghĩa là chúng tôi có thể gửi tín hiệu để tiêu diệt các quy trình khác ngoài Nút chính. quy trình js. Điều này rất hữu ích trong các ứng dụng đồng thời cao với nhiều quy trình đang chạy

Để giết tiến trình Node chính, chúng ta chỉ cần chuyển pid của tiến trình chính

Để thấy điều này đang hoạt động, hãy thay thế hàm

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
9 trong ví dụ mã trước của chúng tôi bằng phiên bản này sử dụng
$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
6

Chương trình thoát đúng lịch trình như trước, sau khi một số câu lệnh tương tự được in. Lần này pid cũng được in ra bàn điều khiển (của bạn có thể khác 15)

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
Terminated: 15

Phương pháp này cũng hoạt động trong REPL cũng như trong Node. chương trình js

Cách thoát nút. js sử dụng quy trình. Huỷ bỏ

Tương tự như vậy, chúng ta có thể sử dụng

node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22
1 để thoát khỏi Nút. js. Phương pháp này hoạt động trong REPL cũng như các tập lệnh và ứng dụng

Sự khác biệt giữa

node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22
1,
$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
6 và process.exit
node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22
1 luôn thoát khỏi Nút. js ngay lập tức và tạo một tệp lõi. Ngoài ra, không có cuộc gọi lại sự kiện nào sẽ chạy

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Ghi chú. Tệp lõi vừa được đề cập không được tạo nếu

node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22
6 được đặt thành
node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22
7. Xem hướng dẫn này để biết thêm chi tiết

Để xem nó hoạt động, hãy thay thế lệnh gọi

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
...
6 trong tệp
node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22
9 của chúng tôi bằng lệnh gọi tới
node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
About to exit with code 22
1 và chạy node batman.js

Khi bạn chạy chương trình với node batman.js, chương trình in ra các dòng như trước, nhưng thoát ra sau khi hết thời gian chờ, in ra một số thông tin về trạng thái của chương trình khi nó bị hủy bỏ

$ node batman.js 
Batman begins
I'm Batman!
I'm Batman!
I'm Batman!
I'm Batman!
Abort trap: 6

REPL

Vì REPL (Read–eval–print loop) là một loại môi trường thực thi khác với Node điển hình của bạn. js, các chiến lược thoát này xứng đáng có các phần đặc biệt của riêng chúng. Điều này là do REPL là một môi trường tương tác và không thoát hoàn toàn như một tập lệnh

Như chúng tôi đã đề cập trong một số phần trước, một số chiến lược trên cũng sẽ hoạt động trong REPL. Tuy nhiên, việc sử dụng chúng trong trường hợp này không phải là điển hình và thay vào đó, bạn nên sử dụng các phương pháp sau

Thoát bằng tổ hợp phím

Không giống như vim, thoát khỏi REPL thực sự đơn giản. Trong một REPL đang chạy, bạn có thể thoát khỏi nó bằng cách sử dụng tổ hợp phím Ctrl + C và nhập nó hai lần. Điều này sẽ gửi SIGINT hoặc tín hiệu gián đoạn tới REPL. Điều này thường được sử dụng để thoát khỏi các chương trình trong hệ thống POSIX

Sử dụng. thoát lệnh

Chúng ta cũng có thể thoát khỏi một Node. js REPL bằng cách sử dụng lệnh ". lối ra". Khi bạn nhập cái này vào Node REPL đang chạy, REPL hiện tại sẽ thoát. Lời gọi này hoạt động tương tự như phương pháp Ctrl + C đã thảo luận ở trên

Phần kết luận

Trong nhiều trường hợp, sử dụng process.exit là đủ để thoát khỏi Node. js. Tuy nhiên, như chúng ta đã thấy, có rất nhiều lựa chọn thay thế. Các phương pháp khác nhau cho phép bạn linh hoạt thoát khỏi bất kỳ vị trí cụ thể nào trong mã của mình. Tuy nhiên, bạn cần cẩn thận với sức mạnh bổ sung này, không chèn mã nguy hiểm có thể dẫn đến thoát ngoài dự kiến, làm hỏng chương trình của bạn

Quy trình trên mã thoát là gì?

Một quy trình đặt mã thoát trong giá trị được trả về từ WinMain hoặc hàm chính "C" . Ví dụ: một quy trình có thể trả về 0 để biểu thị thành công hoặc giá trị khác 0 biểu thị mã lỗi. Một ứng dụng có thể gọi hàm GetExitCodeProcess để lấy mã thoát cho một ứng dụng khác.

Sự khác biệt giữa quá trình thoát 0 và 1 là gì?

Hàm gọi exit(0) và exit(1) được sử dụng để hiển thị trạng thái kết thúc chương trình Python. Lệnh gọi exit(0) biểu thị việc thực thi chương trình thành công trong khi lệnh exit(1) biểu thị một số sự cố/lỗi xảy ra khi thực hiện chương trình .

Làm thế nào để thoát khỏi dòng lệnh nút?

Nhấn CTRL+ c (ngay cả trên máy Mac, đặc biệt là trên máy Mac. ) hoặc chỉ cần gọi quy trình . phương thức exit() để thoát khỏi bảng điều khiển Node. hoặc thậm chí đơn giản hơn, bạn chỉ cần gõ. lối ra.