Đối tượng process trong Node.js là một đối tượng toàn cục, mặc dù nó được định nghĩa trong mô-đun process. Đây là một thể hiện của lớp EventEmitter. Đối tượng process cung cấp thông tin về quá trình Node.js hiện tại. Với sự trợ giúp của một số phương thức và thuộc tính liên quan đến đối tượng này, có thể kiểm soát quá trình Node.js hiện tại.
Đối tượng process là một thể hiện của EventEmitter và phát ra các sự kiện sau −
Sr.No. | Event & Description |
---|---|
1 | exit Emitted when the process is about to exit. There is no way to prevent the exiting of the event loop at this point, and once all exit listeners have finished running, the process will exit. |
2 | beforeExit This event is emitted when node empties its event loop and has nothing else to schedule. Normally, the node exits when there is no work scheduled, but a listener for 'beforeExit' can make asynchronous calls, and cause the node to continue. |
3 | uncaughtException Emitted when an exception bubbles all the way back to the event loop. If a listener is added for this exception, the default action (which is to print a stack trace and exit) will not occur. |
4 | warning The 'warning' event is emitted whenever Node.js emits a process warning. A process warning is similar to an error in that it describes exceptional conditions that are being brought to the user's attention. |
5 | Signal Events Emitted when the processes receives a signal such as SIGINT, SIGHUP, etc. |
Trong đoạn mã sau, sự kiện beforeExit của đối tượng process được liên kết với một hàm callback kiểu arrow. Tương tự, sự kiện exit gọi một hàm callback khác. Hàm on beforeExit chạy trước, sau đó là hàm trên sự kiện exit.
process.on('beforeExit', (code) => { console.log('A beforeExit event occured with code: ', code); }); process.on('exit', (code) => { console.log('Process exit event with code: ', code); }); console.log('This message is displayed first.');
This message is displayed first. A beforeExit event occured with code: 0 Process exit event with code: 0
Note rằng các hàm lắng nghe chỉ được thực hiện các thao tác đồng bộ. Quy trình Node.js sẽ thoát ngay lập tức sau khi gọi các hàm lắng nghe sự kiện 'exit', khiến bất kỳ công việc bổ sung nào vẫn đang được xếp hàng trong vòng lặp sự kiện bị bỏ qua. Trong ví dụ sau đây, chẳng hạn, thời gian chờ sẽ không bao giờ xảy ra −
process.on('exit', function(code) { // Following code will never execute. setTimeout(function() { console.log("This will not run"); }, 0); console.log('About to exit with code:', code); }); console.log("Program Ended");
Program Ended About to exit with code: 0
Phương thức abort() ngay lập tức kết thúc quá trình hiện tại và sau đó tạo ra một tệp core.
Chương trình sau in một thông điệp ra màn hình console sau mỗi giây và kết thúc vòng lặp sau 5 giây khi hàm abort() được gọi.
const abortfunction = () => { console.log('Start...'); // It prints the message after every 1 second setInterval((function() { return console.log('Hello World'); }), 1000); // It calls process.abort() after 5 seconds setTimeout((function() { return process.abort(); }), 5000); }; abortfunction();
Start... Hello World Hello World Hello World Hello World
Việc kết thúc được theo sau bởi một đầu ra tệp lõi dài.
Phương thức này thay đổi thư mục làm việc hiện tại của quá trình Node.js hoặc ném ra một ngoại lệ nếu việc này thất bại (ví dụ, nếu thư mục được chỉ định không tồn tại).
Phương thức process.cwd() trả về thư mục làm việc hiện tại của quá trình Node.js.
console.log(`Starting directory: ${process.cwd()}`); try { process.chdir('NewNodeApp'); console.log(`New directory: ${process.cwd()}`); } catch (err) { console.error(`chdir: ${err}`); }
Starting directory: D:\nodejs New directory: D:\nodejs\NewNodeApp
Nếu thư mục không được tìm thấy, đầu ra sẽ như sau −
Starting directory: D:\nodejs chdir: Error: ENOENT: no such file or directory, chdir 'D:\nodejs' -> 'NewDir'
Phương thức này kết thúc quá trình hiện tại một cách đồng bộ với trạng thái thoát là code (mặc định là 'thành công' với mã 0). Node.js sẽ không kết thúc cho đến khi tất cả các trình lắng nghe sự kiện 'exit' được gọi.
console.log('Code running'); process.on('exit', function(code) { return console.log(`exiting with the error code : ${code}`); }); setTimeout((function() { return process.exit(0); //after 5 sec }), 5000);
Code running exiting with the error code : 0
Phương thức này kết thúc quá trình hiện tại và gửi tín hiệu đến quá trình được xác định bởi pid.
kill(pid[, signal])
pid: ID của một tiến trình
signal: Tín hiệu để gửi, có thể là chuỗi hoặc số. Mặc định: 'SIGTERM'.
Tên tín hiệu là các chuỗi như 'SIGINT' hoặc 'SIGHUP'.
Đoạn mã sau lấy pid của tiến trình hiện tại. Nó chờ một khoảng thời gian đủ lâu trước khi thoát bình thường. Trong khoảng thời gian đó, nếu bạn phát tín hiệu SIGINT bằng cách nhấn ctrl-C, tiến trình sẽ không bị kết thúc.
const pid = process.pid; console.log(`Process ID: ${pid}`); process.on('SIGHUP', () => console.log('Received: SIGHUP')); process.on('SIGINT', () => console.log('Received: SIGINT')); setTimeout(() => {}, 100000); // keep process alive setTimeout((function() { return process.kill(pid, 'SIGINT'); //after 5 sec }), 5000);
Terminal hiển thị ID quá trình và Received: SIGINT mỗi khi ctrlC được nhấn. Sau một khoảng thời gian chờ thêm 5 giây, phương thức kill() được gọi, điều này kết thúc quá trình.
Process ID: 1776 Received: SIGINT
Hàm này trả về một đối tượng mô tả việc sử dụng bộ nhớ của tiến trình Node.js được đo bằng byte.
console.log(process.memoryUsage());
{ rss: 24768512, heapTotal: 4079616, heapUsed: 3153848, external: 1097184, arrayBuffers: 10519 }
Hàm này hoãn việc thực thi một hàm callback cho đến vòng lặp sự kiện (Event Loop) tiếp theo.
nextTick(callback[, ...args])
Hàm này là một phần quan trọng của vòng lặp sự kiện trong API bất đồng bộ của Node.js. Trong Node.js, mỗi lần lặp của Vòng lặp Sự kiện được gọi là một tick. Để lên lịch một hàm callback được gọi trong lần lặp tiếp theo của Vòng lặp Sự kiện, chúng ta sử dụng process.nextTick().
console.log('start'); process.nextTick(() => { console.log('nextTick callback executed in next iteration'); }); console.log('scheduled');
start scheduled nextTick callback executed in next iteration
Kiến trúc CPU của hệ điều hành mà nhị phân Node.js đã được biên dịch.
Các giá trị có thể là −
'arm',
'arm64',
'ia32',
'loong64',
'mips',
'mipsel',
'ppc',
'ppc64',
'riscv64',
's390',
's390x',
'x64'
console.log(`This processor architecture is ${process.arch}`);
This processor architecture is x64
Thuộc tính này trả về một mảng chứa các đối số dòng lệnh được truyền khi quá trình Node.js được khởi động. Bạn có thể truyền các đối số cho tập lệnh sẽ được thực thi từ dòng lệnh. Các đối số được lưu trữ trong một mảng process.argv. Phần tử thứ 0 trong mảng là tệp thực thi node, phần tử đầu tiên là tệp JavaScript, tiếp theo là các đối số được truyền vào.
Lưu đoạn mã sau dưới dạng hello.js và chạy nó từ dòng lệnh, truyền một đối số chuỗi cho nó từ dòng lệnh.
const args = process.argv; console.log(args); const name = args[2]; console.log("Hello,", name);
Trong terminal, nhập
PS D:\nodejs> node hello.js TutorialsPoint [ 'C:\\nodejs\\node.exe', 'c:\\nodejs\\a.js', 'TutorialsPoint' ] Hello, TutorialsPoint
property trả về một đối tượng chứa các biến môi trường.
const processEnvKeys = Object.keys(process.env); processEnvKeys.forEach((key) => { console.log(`${key}: ${process.env[key]}`); });
SystemDrive: C: SystemRoot: C:\WINDOWS TEMP: C:\Users\mlath\AppData\Local\Temp TMP: C:\Users\mlath\AppData\Local\Temp USERDOMAIN: GNVBGL3 USERDOMAIN_ROAMINGPROFILE: GNVBGL3 USERNAME: mlath USERPROFILE: C:\Users\mlath windir: C:\WINDOWS ZES_ENABLE_SYSMAN: 1 TERM_PROGRAM: vscode TERM_PROGRAM_VERSION: 1.84.2 LANG: en_US.UTF-8 COLORTERM: truecolor VSCODE_INJECTION: 1 VSCODE_NONCE: b8069509-e0f5-4bbd-aac9-fc448279b154
Bạn cũng có thể thiết lập các biến môi trường từ dòng lệnh. Gán giá trị cho một hoặc nhiều biến trước tên thực thi node.
USER_ID=101 USER_NAME=admin node app.js
Bên trong kịch bản, các biến môi trường có sẵn dưới dạng các thuộc tính của đối tượng process.env.
process.env.USER_ID; // "101" process.env.USER_NAME; // "admin"
thuộc tính trả về PID của tiến trình.
const { pid } = require('node:process'); console.log(`This process is pid ${pid}`);
This process is pid 16312
Thuộc tính này trả về một chuỗi xác định hệ điều hành.
Các giá trị có thể là −
'aix'
'darwin'
'freebsd'
'linux'
'openbsd'
'sunos'
'win32'
Thuộc tính này chứa chuỗi phiên bản Node.js.
console.log(`Version: ${process.version}`);
Version: v20.9.0