2017-05-06 13 views
0

노드의 child_process.execFile()을 사용하여 모든 출력을 표준 출력 및 오류 스트림에 넣는 프로세스를 시작하고 통신합니다. 이 과정은 시간의 불확정 시간 동안 실행하고 이론적으로 출력의 양, 즉 생성 할 수 있습니다 : 나는 모든 데이터의 집계보기를 필요로하지 않기 때문에 내가 execFile()에 마지막 인수를 사용하지 않는버퍼링하지 않고 child_process.execFile()

const process = execFile('path/to/executable', [], {encoding: buffer'}); 
process.stdout.on('data', (chunk) => { 
    doSomethingWith(chunk); 
}); 
process.stderr.on('data', (chunk) => { 
    renderLogMessage(chunk); 
}); 

공지 사항을 그 그 시냇물에서 나왔다. 이 누락에도 불구하고 Node는 어쨌든 출력을 버퍼링하는 것처럼 보입니다. 그리고 많은 양의 출력을 생성하기에 충분한 입력을 제공함으로써이 프로세스를 안정적으로 SIGTERM 신호로 끝낼 수 있습니다. 프로세스가 상태를 유지하고 단순히 주기적으로 다시 시작할 수 없으므로 문제가됩니다.

이 동작을 어떻게 변경하거나 해결할 수 있습니까?

답변

0

execFile을 사용하고 싶지 않습니다. 통과하지 않는 콜백을 호출하여 "반환"하기 전에 자식 프로세스가 종료 될 때까지 대기합니다. 당신의 자식 프로세스가 종료하는 이유

The documentation for execFile도 설명 바이트의 데이터

maxBuffer<number> 최대 금액은 표준 출력 또는 표준 오류에 허용했다. (기본값 : 200*1024) 초과하면 하위 프로세스가 종료됩니다. 증분 child_process.spawn()을 사용하여, 표준 출력/표준 에러을 읽을 수있는 장기 실행 프로세스에 대한

.