반응형

1. child_process 모듈, exec 함수

exec 함수에 다음과 같은 option 을 설정 가능하다.

 cwd : 현재의 작업 디렉토리

 encoding : child output에 대한 encoding (기본적으로 utf8로 ascii, ucs2, base64등으로 변경 가능하다)

 timeout : 하위 프로세스의 실행 대기 시간(기본적으로 0, 무한 기다림)

 maxBuffer : output(stdout/stderr)의 버퍼(기본적으로 200*1024)

 killSignal : timeout 또는 output 버퍼가 다 찼을 경우에 하위 프로세스에 보낼 시그널(기본은 SIGTERM)

 env : 하위 프로세스에 전달할 환경 변수(기본적으로 null)

예를 들어

var exec=require('child_process').exec;

var options={

timeout:10000,

killSignal:'SIGKILL'

};

exec ('cat *.js',options,function.....);

과 같이 호출 가능함


2. child_process 모듈, spawn 함수

spawn 함수로 child_process와 데이터를 주고 받는 예제

- child process

  process.stdin.resume() -> 기본적으로 stdin 이 pause 상태이기 때문에 resume으로 stdin에서 입력 받음

- parent process

 child.stdin 및 child.stdout으로 데이터를 하위 프로세스와 주고 받음

 child.stdout.once를 사용한 이유는 setInterval에서 한번의 데이터를 전송하고 이에 대한 한번의 callback을 받기 위함, child.stdout.on을 이용하게 되면 여러번 callback함수를 등록하게 됨

- 실행 결과


3. 하위 프로세스의 종료 코드와 종료가된 시그널을 수신 받음


child.on('exit', function(code){

console.log('child process terminated with code ' + code);

});


signal도 수신하고 싶다면


child.on('exit',function(code,signal){

if(code){

console.log('child process terminated with code '+code);

} else if (signal){

console.log('child process terminated because of signal '+signal);

}

});


4. 하위 프로세스에 시그널 전달

 상위 프로세스는 하위 프로세스에 시그널을 전송 가능하며, 이해하지 못하는 시그널을 수신시 하위 프로세스는 종료한다. 어떤 시그널을 하위 프로세스에서, 어떤 시그널은 운영체제가 처리한다. 


var spawn=require('child_process').spawn;

var child=spawn('sleep',['10']);

setTimeout(function(){

child.kill('SIGUSR2');

},1000);


SIGUSR2와 같은 시그널을 하위 프로세스에서 다음과 같이 처리 가능하다.


process.on('SIGUSR2',function(){

console.log('Got a SIGUSR2 signal');

});


SIGKILL, SIGSTOP은 운영체제에서 처리하며 하위 프로세스에서 해당 시그널을 처리하는 함수를 만든다고 해도 운영체제게 해당 프로세스를 중지시킨다.






반응형
Posted by alias
,