Node.js
자식 프로세스로 파일 또는 명령 실행하기
수색…
통사론
- child_process.exec (command [, options] [, callback])
- child_process.execFile (file [, args] [, options] [, callback])
- child_process.fork (modulePath [, args] [, options])
- child_process.spawn (command [, args] [, options])
- child_process.execFileSync (file [, args] [, options])
- child_process.execSync (명령 [, options])
- child_process.spawnSync (command [, args] [, options])
비고
자식 프로세스를 처리 할 때 모든 비동기 메서드는 ChildProcess
의 인스턴스를 반환하고 모든 동기 버전은 실행 된 모든 결과를 반환합니다. 오류가 발생하면 Node.js를 다른 동기 작업처럼, 그것은 발생합니다.
명령을 실행하는 새 프로세스 생성
버퍼되지 않은 출력이 필요한 새 프로세스를 생성하려면 (예 : 인쇄가 아닌 일정 기간 동안 출력을 출력하고 즉시 종료 할 수있는 장기 실행 프로세스) child_process.spawn()
사용 child_process.spawn()
.
이 메서드는 주어진 명령과 인수 배열을 사용하여 새 프로세스를 생성합니다. 반환 값은 ChildProcess
의 인스턴스이며, 차례대로 stdout
및 stderr
속성을 제공합니다. 이러한 스트림은 모두 stream.Readable
인스턴스입니다.
다음 코드는 ls -lh /usr
명령을 실행하는 것과 같습니다.
const spawn = require('child_process').spawn;
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
다른 예제 명령 :
zip -0vr "archive" ./image.png
다음과 같이 작성 될 수 있습니다.
spawn('zip', ['-0vr', '"archive"', './image.png']);
명령을 실행하기위한 쉘 생성
버퍼링 된 출력 (즉, 스트림이 아님)이 필요한 쉘에서 명령을 실행하려면 child_process.exec
사용 child_process.exec
. 예를 들어, cat *.js file | wc -l
, 옵션없이, 다음과 같이 보일 것이다 :
const exec = require('child_process').exec;
exec('cat *.js file | wc -l', (err, stdout, stderr) => {
if (err) {
console.error(`exec error: ${err}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
함수는 최대 세 개의 매개 변수를 허용합니다.
child_process.exec(command[, options][, callback]);
command 매개 변수는 문자열이며 필수 요소이며 object 및 callback 옵션은 모두 선택 사항입니다. 옵션 객체가 지정되지 않으면 exec
는 다음을 기본값으로 사용합니다.
{
encoding: 'utf8',
timeout: 0,
maxBuffer: 200*1024,
killSignal: 'SIGTERM',
cwd: null,
env: null
}
options 객체는 shell
매개 변수도 지원합니다.이 매개 변수는 기본적으로 UNIX의 경우 /bin/sh
이고 Windows의 경우 cmd.exe
이며 프로세스의 사용자 ID를 설정하는 uid
옵션과 그룹 ID의 gid
옵션을 지원합니다.
명령 실행이 완료 될 때 호출되는 콜백은 세 개의 인수 (err, stdout, stderr)
로 호출됩니다. 명령이 성공적으로 실행되면 err
은 null
, 그렇지 않으면 err.code
가 프로세스의 종료 코드가되고 err.signal
이 종료 할 때 보낸 신호가되고 Error
의 인스턴스가됩니다.
stdout
및 stderr
인수는 명령의 출력입니다. 이것은 옵션 객체 (디폴트 : string
)에 지정된 인코딩으로 디코딩되지만 그렇지 않으면 Buffer
객체로 반환 될 수 있습니다.
또한 exec
의 동기 버전 인 execSync
있습니다. 동기 버전은 콜백을받지 않으며 ChildProcess
인스턴스 대신 stdout
을 반환합니다. 동기 버전에서 오류가 발생하면, 그것은 던져 프로그램을 중단합니다. 다음과 같이 보입니다.
const execSync = require('child_process').execSync;
const stdout = execSync('cat *.js file | wc -l');
console.log(`stdout: ${stdout}`);
실행 파일을 실행하는 프로세스 생성
실행 파일과 같은 파일을 실행하려면 child_process.execFile
사용 child_process.execFile
. child_process.exec
와 같은 쉘을 생성하는 대신에, 명령을 실행하는 것보다 약간 더 효율적인 새로운 프로세스를 직접 생성합니다. 이 함수는 다음과 같이 사용할 수 있습니다.
const execFile = require('child_process').execFile;
const child = execFile('node', ['--version'], (err, stdout, stderr) => {
if (err) {
throw err;
}
console.log(stdout);
});
child_process.exec
과 child_process.exec
함수는 최대 네 개의 매개 변수를 허용합니다. 두 번째 매개 변수는 실행 파일에 제공 할 인수 배열입니다.
child_process.execFile(file[, args][, options][, callback]);
그렇지 않으면 옵션과 콜백 형식이 child_process.exec
동일합니다. 함수의 동기 버전에서도 마찬가지입니다.
const execFileSync = require('child_process').execFileSync;
const stdout = execFileSync('node', ['--version']);
console.log(stdout);