English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
모두가 알고 있듯이 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()이 부모 프로세스와 자식 프로세스 간에 통신 파이프를 만들어, 프로세스 간 통신을 위해 사용된다는 점입니다.
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를 만들어 보겠습니다.
console.log("프로세스 " + process.argv[2] + "실행하십시오.");
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:
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를 만들어 보겠습니다.
console.log("프로세스 " + process.argv[2] + "실행하십시오.");
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
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를 만들어 보겠습니다.
console.log("프로세스 " + process.argv[2] + "실행하십시오.");
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