English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NodeJS 기본 튜토리얼

NodeJS Express.js

NodeJS 버퍼&URL;

NodeJS MySql

NodeJS MongoDB

NodeJS 파일(FS)

NodeJS 다른

Node.js 다중 프로세스

모두가 알고 있듯이 Node.js는 단일 스레드 모드로 실행되지만, 이는 이벤트로드로드를 사용하여 병행 처리를 처리하며, 이는 다핵 CPU 시스템에서 여러 서브 프로세스를 생성하여 성능을 향상시키는 데 도움이 됩니다.

서브 프로세스는 항상 세 개의 스트림 객체를 가지고 있습니다: child.stdin, child.stdout, child.stderr. 이들은 부모 프로세스의 stdio 스트림과 공유될 수도 있으며, 독립적으로 흐르는 스트림 객체로도 될 수 있습니다.

Node는 child_process 모듈을 통해 서브 프로세스를 생성하며, 생성 방법은 다음과 같습니다:

  • exec - child_process.exec은 명령어를 자식 프로세스에서 실행하고, 자식 프로세스의 출력을 캐시하고, 콜백 함수 매개변수의 형태로 자식 프로세스의 출력을 반환합니다.

  • spawn - child_process.spawn 사용하여 지정된 명령행 파라미터로 새 프로세스를 생성합니다.

  • fork}} - child_process.fork는 spawn()의 특별한 형태로, 자식 프로세스에서 실행할 모듈(예: fork('./son.js')는 spawn('node', ['.',/son.js')는 spawn() 메서드와 다른 점은 fork()이 부모 프로세스와 자식 프로세스 간에 통신 파이프를 만들어, 프로세스 간 통신을 위해 사용된다는 점입니다.

exec() 메서드

child_process.exec은 명령어를 자식 프로세스에서 실행하고, 자식 프로세스의 출력을 캐시하고, 콜백 함수 매개변수의 형태로 자식 프로세스의 출력을 반환합니다.

문법은 다음과 같습니다:

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

파라미터

파라미터 설명:

command: 문자열, 실행할 명령어, 파라미터는 공백으로 구분됩니다

options : 객체, 다음과 같을 수 있습니다:

  • cwd , 문자열, 자식 프로세스의 현재 작업 디렉토리

  • env, 객체, 환경 변수 키-밸류对人体

  • encoding, 문자열, 문자编码(기본: 'utf8')

  • shell, 문자열, 실행할 명령어의 셸(기본: UNIX에서)/bin/sh, Windows에서는 cmd.exe, 셸은 인식해야 합니다 -c 옵션은 UNIX에서 사용되거나 /s /c Windows에서. Windows에서는 명령 프롬프트가 cmd.exe와 호환되어야 합니다)

  • timeout, 숫자, 지연 시간(기본: 0)

  • maxBuffer, 숫자, stdout 또는 stderr에서 존재할 수 있는 최대 버퍼(이진)입니다. 초과하면 자식 프로세스가 죽여집니다 (기본: 200*1024)

  • killSignal, 문자열, 종료 신호(기본: 'SIGTERM')

  • uid, 숫자, 사용자 프로세스 ID를 설정합니다

  • gid, 숫자, 프로세스 그룹 ID를 설정합니다

callback :콜백 함수는 error, stdout, stderr 세 가지 매개변수를 포함합니다.

exec() 메서드는 가장 큰 버퍼를 반환하고 프로세스가 끝날 때까지 기다리고, 버퍼의 내용을 한 번에 반환합니다.

온라인 예제

두 개의 js 파일 support.js와 master.js를 만들어 보겠습니다.

support.js 파일 코드:

console.log("프로세스 " + process.argv[2] + "실행하십시오.");

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('자식 프로세스가 종료되었습니다. 종료 코드 ',+code);
    });
}

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

$ node master.js 
자식 프로세스가 종료되었습니다. 종료 코드 0
stdout: 프로세스 1 실행하십시오。
stderr: 
자식 프로세스가 종료되었습니다. 종료 코드 0
stdout: 프로세스 0 실행。
stderr: 
자식 프로세스가 종료되었습니다. 종료 코드 0
stdout: 프로세스 2 실행하십시오。
stderr:

spawn() 메서드

child_process.spawn은 지정된 명령 줄 매개변수로 새 프로세스를 생성합니다. 다음과 같은 문법 형식으로 사용됩니다:

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

파라미터

파라미터 설명:

command: 실행할 명령

args: Array 문자열 파라미터 배열

options Object

  • cwd String 자식 프로세스의 현재 작업 디렉토리

  • env Object 환경 변수 키-밸류 쌍

  • stdio Array|String 서브 프로세스의 stdio 설정

  • detached Boolean 이 서브 프로세스는 프로세스 그룹의 리더가 됩니다

  • uid Number 사용자 프로세스 ID 설정

  • gid Number 프로세스 그룹 ID 설정

spawn() 메서드는 (stdout & stderr) 스트림을 반환하며, 프로세스가 많은 데이터를 반환할 때 사용됩니다. 프로세스가 시작되면 spawn()은 즉시 응답을 받기 시작합니다.

온라인 예제

두 개의 js 파일 support.js와 master.js를 만들어 보겠습니다.

support.js 파일 코드:

console.log("프로세스 " + process.argv[2] + "실행하십시오.");

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('자식 프로세스가 종료되었습니다. 종료 코드 ',+code);});}

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

$ node master.js stdout: 프로세스 0 실행。
자식 프로세스가 종료되었습니다. 종료 코드 0
stdout: 프로세스 1 실행하십시오。
자식 프로세스가 종료되었습니다. 종료 코드 0
stdout: 프로세스 2 실행하십시오。
자식 프로세스가 종료되었습니다. 종료 코드 0

fork 메서드

child_process.fork는 spawn() 메서드의 특수 형식으로, 프로세스를 생성하는 데 사용되며, 다음과 같은 문법 형식으로 사용됩니다:

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

파라미터

파라미터 설명:

modulePath: String, 자식 프로세스에서 실행할 모듈

args: Array 문자열 파라미터 배열

options:Object

  • cwd String 자식 프로세스의 현재 작업 디렉토리

  • env Object 환경 변수 키-밸류 쌍

  • execPath String 자식 프로세스를 생성할 실행 파일

  • execArgv Array 자식 프로세스의 실행 파일의 문자열 파라미터 배열 (기본: process.execArgv)

  • silent Boolean true라면, 자식 프로세스의 stdin, stdout 및 stderr가 부모 프로세스에 연결됩니다. 그렇지 않으면, 부모 프로세스에서 상속됩니다. (기본值为: false)

  • uid Number 사용자 프로세스 ID 설정

  • gid Number 프로세스 그룹 ID 설정

반환된 객체는 ChildProcess 예제의 모든 메서드를 가지고 있으며, 내장된 통신 채널이 있습니다.

온라인 예제

두 개의 js 파일 support.js와 master.js를 만들어 보겠습니다.

support.js 파일 코드:

console.log("프로세스 " + process.argv[2] + "실행하십시오.");

master.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('자식 프로세스가 종료되었습니다. 종료 코드 ', + code);});}

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

$ node master.js 
프로세스 0 실행하십시오。
자식 프로세스가 종료되었습니다. 종료 코드 0
프로세스 1 실행하십시오。
자식 프로세스가 종료되었습니다. 종료 코드 0
프로세스 2 실행하십시오。
자식 프로세스가 종료되었습니다. 종료 코드 0