Node.js-확장 애플리케이션
Node.js는 단일 스레드 모드에서 실행되지만 이벤트 기반 패러다임을 사용하여 동시성을 처리합니다. 또한 다중 코어 CPU 기반 시스템에서 병렬 처리를 활용하기 위해 자식 프로세스를 쉽게 만들 수 있습니다.
자식 프로세스에는 항상 세 개의 스트림이 있습니다. child.stdin, child.stdout, 및 child.stderr 부모 프로세스의 stdio 스트림과 공유 될 수 있습니다.
노드 제공 child_process 하위 프로세스를 만드는 다음 세 가지 주요 방법이있는 모듈입니다.
exec − child_process.exec 메소드는 쉘 / 콘솔에서 명령을 실행하고 출력을 버퍼링합니다.
spawn − child_process.spawn은 주어진 명령으로 새 프로세스를 시작합니다.
fork − child_process.fork 메소드는 자식 프로세스를 생성하기위한 spawn ()의 특별한 경우입니다.
exec () 메서드
child_process.exec 메서드는 셸에서 명령을 실행하고 출력을 버퍼링합니다. 다음과 같은 서명이 있습니다.
child_process.exec(command[, options], callback)
매개 변수
다음은 사용 된 매개 변수에 대한 설명입니다.
command (String) 공백으로 구분 된 인수를 사용하여 실행할 명령입니다.
options (Object)는 다음 옵션 중 하나 이상을 포함 할 수 있습니다.
cwd (문자열) 하위 프로세스의 현재 작업 디렉토리
env (Object) 환경 키-값 쌍
encoding (문자열) (기본값 : 'utf8')
shell (문자열) 명령을 실행할 셸 (기본값 : UNIX의 경우 '/ bin / sh', Windows의 경우 'cmd.exe', 셸은 UNIX의 경우 -c 스위치, Windows의 경우 / s / c를 이해해야합니다. Windows의 경우, 명령 줄 구문 분석은 cmd.exe와 호환되어야합니다.)
timeout (숫자) (기본값 : 0)
maxBuffer (숫자) (기본값 : 200 * 1024)
killSignal (문자열) (기본값 : 'SIGTERM')
uid (번호) 프로세스의 사용자 ID를 설정합니다.
gid (번호) 프로세스의 그룹 ID를 설정합니다.
callback 이 함수는 세 개의 인수를 얻습니다. error, stdout, 과 stderr 프로세스가 종료 될 때 출력과 함께 호출됩니다.
exec () 메서드는 최대 크기의 버퍼를 반환하고 프로세스가 끝날 때까지 기다렸다가 버퍼링 된 모든 데이터를 한 번에 반환하려고합니다.
예
support.js와 master.js라는 두 개의 js 파일을 만들어 보겠습니다.
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);
});
}
이제 master.js를 실행하여 결과를 확인하십시오.
$ node master.js
출력을 확인하십시오. 서버가 시작되었습니다.
Child process exited with exit code 0
stdout: Child Process 1 executed.
stderr:
Child process exited with exit code 0
stdout: Child Process 0 executed.
stderr:
Child process exited with exit code 0
stdout: Child Process 2 executed.
spawn () 메서드
child_process.spawn 메서드는 주어진 명령으로 새 프로세스를 시작합니다. 다음과 같은 서명이 있습니다.
child_process.spawn(command[, args][, options])
매개 변수
다음은 사용 된 매개 변수에 대한 설명입니다.
command (문자열) 실행할 명령
args (배열) 문자열 인수 목록
options (Object)는 다음 옵션 중 하나 이상을 포함 할 수 있습니다.
cwd (문자열) 자식 프로세스의 현재 작업 디렉터리입니다.
env (Object) 환경 키-값 쌍입니다.
stdio (배열) String Child의 stdio 구성.
customFds (배열) stdio에 사용할 자식에 대한 더 이상 사용되지 않는 파일 설명자입니다.
detached (부울) 하위가 프로세스 그룹 리더가됩니다.
uid (번호) 프로세스의 사용자 ID를 설정합니다.
gid (번호) 프로세스의 그룹 ID를 설정합니다.
spawn () 메서드는 스트림 (stdout 및 stderr)을 반환하며 프로세스가 대량의 데이터를 반환 할 때 사용해야합니다. spawn ()은 프로세스가 실행을 시작하자마자 응답을 받기 시작합니다.
예
support.js 및 master.js라는 두 개의 js 파일을 만듭니다.
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);
});
}
이제 master.js를 실행하여 결과를 확인하십시오.
$ node master.js
출력을 확인하십시오. 서버가 시작되었습니다
stdout: Child Process 0 executed.
child process exited with code 0
stdout: Child Process 1 executed.
stdout: Child Process 2 executed.
child process exited with code 0
child process exited with code 0
fork () 메서드
child_process.fork 메소드는 Node 프로세스를 생성하기위한 spawn ()의 특별한 경우입니다. 다음과 같은 서명이 있습니다.
child_process.fork(modulePath[, args][, options])
매개 변수
다음은 사용 된 매개 변수에 대한 설명입니다.
modulePath (문자열) 자식에서 실행할 모듈입니다.
args (배열) 문자열 인수 목록
options (Object)는 다음 옵션 중 하나 이상을 포함 할 수 있습니다.
cwd (문자열) 자식 프로세스의 현재 작업 디렉터리입니다.
env (Object) 환경 키-값 쌍입니다.
execPath (String) 자식 프로세스를 만드는 데 사용되는 실행 파일입니다.
execArgv (배열) 실행 파일에 전달 된 문자열 인수 목록 (기본값 : process.execArgv).
silent (Boolean) true 인 경우 자식의 stdin, stdout 및 stderr가 부모에게 파이프되고 그렇지 않으면 부모로부터 상속됩니다. 자세한 내용은 spawn ()의 stdio에 대한 "pipe"및 "inherit"옵션을 참조하십시오. 세부 정보 (기본값은 false).
uid (번호) 프로세스의 사용자 ID를 설정합니다.
gid (번호) 프로세스의 그룹 ID를 설정합니다.
fork 메서드는 일반 ChildProcess 인스턴스에 모든 메서드를 포함하는 것 외에도 기본 제공 통신 채널이있는 개체를 반환합니다.
예
support.js 및 master.js라는 두 개의 js 파일을 만듭니다.
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 worker_process = child_process.fork("support.js", [i]);
worker_process.on('close', function (code) {
console.log('child process exited with code ' + code);
});
}
이제 master.js를 실행하여 결과를 확인하십시오.
$ node master.js
출력을 확인하십시오. 서버가 시작되었습니다.
Child Process 0 executed.
Child Process 1 executed.
Child Process 2 executed.
child process exited with code 0
child process exited with code 0
child process exited with code 0