Cách thoát khỏi chương trình Node.js

Tìm hiểu cách chấm dứt ứng dụng Node.js theo cách tốt nhất có thể

Có nhiều cách khác nhau để chấm dứt ứng dụng Node.js.

Khi chạy một chương trình trong bảng điều khiển, bạn có thể đóng chương trình đó bằngctrl-C, nhưng điều tôi muốn thảo luận ở đây là thoát theo chương trình.

Hãy bắt đầu với điều quyết liệt nhất và xem tại sao bạn lại tốt hơnkhông phảisử dụng nó.

Cácprocessmô-đun lõi cung cấp một phương pháp tiện dụng cho phép bạn thoát theo chương trình khỏi chương trình Node.js:process.exit().

Khi Node.js chạy dòng này, quá trình ngay lập tức bị buộc phải kết thúc.

Điều này có nghĩa là mọi cuộc gọi lại đang chờ xử lý, mọi yêu cầu mạng vẫn đang được gửi, mọi quyền truy cập hệ thống tệp hoặc các quy trình ghi vàostdouthoặc làstderr- tất cả sẽ bị chấm dứt một cách vô duyên ngay lập tức.

Nếu điều này phù hợp với bạn, bạn có thể chuyển một số nguyên báo hiệu hệ điều hành mã thoát:

process.exit(1)

Theo mặc định, mã thoát là0, có nghĩa là thành công. Các mã thoát khác nhau có ý nghĩa khác nhau, mà bạn có thể muốn sử dụng trong hệ thống của riêng mình để chương trình giao tiếp với các chương trình khác.

Bạn có thể đọc thêm về mã thoát tạihttps://nodejs.org/api/process.html#process_exit_codes

Bạn cũng có thể đặtprocess.exitCodebất động sản:

process.exitCode = 1

và khi chương trình kết thúc sau đó, Node sẽ trả về mã thoát đó.

Một chương trình sẽ thoát ra một cách duyên dáng khi tất cả quá trình xử lý hoàn tất.

Nhiều lần với Node, chúng tôi khởi động các máy chủ, như máy chủ HTTP này:

const express = require('express')
const app = express()

app.get(’/’, (req, res) => { res.send(‘Hi!’) })

app.listen(3000, () => console.log(‘Server ready’))

Chương trình này sẽ không bao giờ kết thúc. Nếu bạn gọiprocess.exit(), mọi yêu cầu hiện đang chờ xử lý hoặc đang chạy sẽ bị hủy bỏ. Đây làkhông hay đâu.

Trong trường hợp này, bạn cần gửi lệnh một tín hiệu SIGTERM và xử lý lệnh đó bằng trình xử lý tín hiệu quy trình:

Ghi chú:processkhông yêu cầu "request", nó tự động có sẵn.

const express = require('express')

const app = express()

app.get(’/’, (req, res) => { res.send(‘Hi!’) })

const server = app.listen(3000, () => console.log(‘Server ready’))

process.on(‘SIGTERM’, () => { server.close(() => { console.log(‘Process terminated’) }) })

Tín hiệu là gì? Tín hiệu là một hệ thống thông tin liên lạc POSIX: một thông báo được gửi đến một quá trình để thông báo cho nó về một sự kiện đã xảy ra.

SIGKILLlà các tín hiệu cho biết một quá trình kết thúc ngay lập tức và lý tưởng sẽ hoạt động nhưprocess.exit().

SIGTERMlà các tín hiệu cho biết một quá trình kết thúc một cách duyên dáng. Đó là tín hiệu được gửi từ những người quản lý quy trình nhưupstarthoặc làsupervisordvà nhiều người khác.

Bạn có thể gửi tín hiệu này từ bên trong chương trình, trong một chức năng khác:

process.kill(process.pid, 'SIGTERM')

Hoặc từ một chương trình đang chạy Node.js khác hoặc bất kỳ ứng dụng nào khác đang chạy trong hệ thống của bạn biết PID của quá trình bạn muốn kết thúc.

Tải xuống miễn phí của tôiSổ tay Node.js


Các hướng dẫn nút khác: