Node.js - Process

Đố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.

Process Events

Đố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.

Example

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.');

Output

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 −

Example

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");

Output

Program Ended
About to exit with code: 0

Process Methods

abort()

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.

Example

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();
Output
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.

chdir()

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).

cwd()

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.

Example

console.log(`Starting directory: ${process.cwd()}`);
try {
   process.chdir('NewNodeApp');
   console.log(`New directory: ${process.cwd()}`);
} catch (err) {
   console.error(`chdir: ${err}`);
}
Output
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'

exit()

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.

Example

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);
Output
Code running
exiting with the error code : 0

kill()

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])

Parameters

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'.

Example

Đ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

memoryUsage()

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.

Example

console.log(process.memoryUsage());
Output
{
  rss: 24768512,
  heapTotal: 4079616,
  heapUsed: 3153848,
  external: 1097184,
  arrayBuffers: 10519
}

nextTick()

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().

Example

console.log('start');
process.nextTick(() => {
   console.log('nextTick callback executed in next iteration');
});
console.log('scheduled');
Output
start
scheduled
nextTick callback executed in next iteration

Process properties

process.arch

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'

Example

console.log(`This processor architecture is ${process.arch}`);
Output
This processor architecture is x64

process.argv

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

process.env

property trả về một đối tượng chứa các biến môi trường.

Example

const processEnvKeys = Object.keys(process.env);

processEnvKeys.forEach((key) => {
   console.log(`${key}: ${process.env[key]}`);
});
Output
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"

process.pid

thuộc tính trả về PID của tiến trình.

Example

const { pid } = require('node:process');

console.log(`This process is pid ${pid}`);
Output
This process is pid 16312

process.platform

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'

process.version

Thuộc tính này chứa chuỗi phiên bản Node.js.

Example

console.log(`Version: ${process.version}`);
Output
Version: v20.9.0