수색…


통사론

  • 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 의 인스턴스이며, 차례대로 stdoutstderr 속성을 제공합니다. 이러한 스트림은 모두 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) 로 호출됩니다. 명령이 성공적으로 실행되면 errnull , 그렇지 않으면 err.code 가 프로세스의 종료 코드가되고 err.signal 이 종료 할 때 보낸 신호가되고 Error 의 인스턴스가됩니다.

stdoutstderr 인수는 명령의 출력입니다. 이것은 옵션 객체 (디폴트 : 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.execchild_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);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow