Rate this post

Module child process Node.js cung cấp khả năng tạo ra các child process theo cách tương tự như popen.

Các bài viết liên quan:

Có ba cách chính để tạo child process:

  • child_process.exec (): Phương thức này chạy command trong console và buffer đầu ra.
  • Phương thức child_process.spawn (): Phương thức này khởi chạy một process mới bằng một lệnh đã cho.
  • Phương thức child_process.fork (): Phương thức này là một phương thức đặc biệt của spawn () để tạo các child process.

child_process.exec ()

Cú pháp:

child_process.exec(command[, options], callback)  

Parameters:

1) command: Nó chỉ định lệnh để chạy, với các đối số được phân tách bằng dấu cách.

2) options: Nó có thể chứa một hoặc nhiều tùy chọn sau:

  • cwd: Nó chỉ định thư mục làm việc hiện tại của child process.
  • env:  Nó chỉ định các cặp khóa-giá trị của môi trường.
  • encoding: String (Default: ‘utf8’)
  • shell: Nó chỉ định chuỗi Shell để thực thi lệnh với (Mặc định: ‘/ bin / sh’ trên UNIX, ‘cmd.exe’ trên Windows, Shell nên hiểu công tắc -c trên UNIX hoặc / s / c trên Windows. Bật Windows, phân tích cú pháp dòng lệnh phải tương thích với cmd.exe.)
  • timeout:  Number (Mặc định: 0)
  • maxBuffer: Number (Mặc định: 200 * 1024)
  • killSignal: String (Mặc định: ‘SIGTERM’)
  • uid Number: Đặt danh tính người dùng của quy trình.
  • gid Number: Đặt danh tính nhóm của tiến trình.

callback: Hàm callback chỉ định lỗi ba đối số, stdout và stderr được gọi với kết quả đầu ra sau khi quá trình kết thúc.

Node.js child_process.exec() example 1

Hãy xem ví dụ quy trình đơn giản để in kiến ​​trúc, pid, nền tảng và phiên bản của quy trình.

File: child_process_example1.js

const exec = require('child_process').exec;  
exec('my.bat', (err, stdout, stderr) => {  
  if (err) {  
  console.error(err);  
   return;  
 }  
  console.log(stdout);  
});  

Tạo một tệp hàng loạt có tên my.bat có mã sau:

File: my.bat

dir  
mkdir child  

Mở dấu nhắc lệnh Node.js và chạy đoạn mã sau:

node child_process_example1.js  

Nó sẽ thực hiện hai lệnh dirmkdir child . Lệnh dir sẽ hiển thị danh sách thư mục hiện tại và lệnh mkdir sẽ tạo một thư mục mới. Đối với linux, bạn có thể dùng lệnh để hiển thị danh sách thư mục hiện tại.

Nó cũng sẽ tạo một thư mục mới.

Node.js child_process.exec() example 2

Tạo hai tệp js có tên support.js và master.js, có mã sau:

File: support.js

console.log("Child Process " + process.argv[2] + " executed." );  

File: master.js

const fs = require('fs');  
const child_process = require('child_process');  
for(var i=0; i<3; i++) {  
   var workerProcess = child_process.exec('node support.js '+i,  
      function (error, stdout, stderr) {  
         if (error) {  
            console.log(error.stack);  
            console.log('Error code: '+error.code);  
            console.log('Signal received: '+error.signal);  
         }  
         console.log('stdout: ' + stdout);  
         console.log('stderr: ' + stderr);  
      });  
      workerProcess.on('exit', function (code) {  
      console.log('Child process exited with exit code '+code);  
   });  
}  

Open Node.js command prompt and run the following code:

node master.js  

child_process.spawn ()

Phương thức child_process.spawn () khởi chạy một proccess mới bằng một lệnh đã cho. Phương thức này trả về các dữ liệu luồng (stdout & stderr) và nó được sử dụng trong trường hợp có một lượng lớn dữ liệu.

Cú pháp:

child_process.spawn(command[, args][, options])   

Thông số:

1) command: Nó chỉ định lệnh để chạy

2) args: Nó chỉ định một mảng danh sách các đối số chuỗi

3) options: Nó có thể chứa một hoặc nhiều tuỳ chọn sau:

  • cwd: Nó chỉ định thư mục làm việc hiện tại của child process.
  • env: Nó chỉ định các cặp khoá- giá trị của môi trường.
  • stdio: Cấu hình stdio của Array | String Child
  • customFds: Bộ mô tả tệp không được chấp nhận của mảng để con sử dụng cho stdio
  • detached Boolean : Đứa trẻ sẽ là trưởng nhóm quy trình.
  • uid Number: Đặt danh tính người dùng của quy trình.
  • gid Number:  Đặt danh tính nhóm của tiến trình.

Ví dụ Node.js child_process.spawn()

File: support.js

console.log("Child Process " + process.argv[2] + " executed." );  

File: master.js

const fs = require('fs');  
const child_process = require('child_process');  
 for(var i=0; i<3; i++) {  
   var workerProcess = child_process.spawn('node', ['support.js', i]);  
  workerProcess.stdout.on('data', function (data) {  
      console.log('stdout: ' + data);  
   });  
 workerProcess.stderr.on('data', function (data) {  
      console.log('stderr: ' + data);  
   });  
 workerProcess.on('close', function (code) {  
      console.log('child process exited with code ' + code);  
   });  
}  

Mở dấu nhắc lệnh Node.js và chạy đoạn mã sau:

node master.js  

child_process.fork ()

child_process.fork là phương thức spawn () đặc biệt để tạo các tiến trình trong Node. Phương thức này trả về đối tượng với một kênh giao tiếp tích hợp và có đầy đủ tính chất của một phiên bản ChildProcess bình thường.

Cú pháp:

child_process.fork(modulePath[, args][, options])   

Thông số:

1) modulePath: Đây là một chuỗi chỉ định mô-đun sẽ chạy trong phần con.

2) args: Nó chỉ định một mảng Danh sách các đối số chuỗi.

3) tùy chọn: Nó có thể chứa một hoặc nhiều tùy chọn sau:

  • cwd: Nó chỉ định thư mục làm việc hiện tại của child process.
  • env: Nó chỉ định các cặp khóa-giá trị của môi trường.
  • execPath: Đây là một chuỗi Executable được sử dụng để tạo child process.
  • execArgv:  Nó chỉ định Danh sách Mảng của các đối số chuỗi được truyền cho tệp thực thi (Mặc định: process.execArgv).
  • silent: Nó chỉ định Boolean Nếu true, stdin, stdout và stderr của con sẽ được chuyển đến cha mẹ, nếu không chúng sẽ được kế thừa từ cha mẹ, hãy xem các tùy chọn “pipe” và “inherit” cho stdio của spawn () để biết thêm chi tiết (mặc định là sai).
  • uid Number: Đặt danh tính người dùng của quy trình.
  • gid Number: Đặt danh tính nhóm của tiến trình.

Ví dụ về Node.js child_process.fork ()

Tạo hai tệp js có tên support.js và master.js, có mã sau:

File: support.js

const fs = require('fs');  
const child_process = require('child_process');  
 for(var i=0; i<3; i++) {  
   var worker_process = child_process.fork("support.js", [i]);    
  worker_process.on('close', function (code) {  
      console.log('child process exited with code ' + code);  
   });  
}  

Mở dấu nhắc lệnh Node.js và chạy đoạn mã sau:

node master.js 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now