포스트

node.js의 child_process 모듈

자식 프로세스를 생성하는 모듈입니다. worder_threads 와 비교하자면 worker_threads 는 하나의 프로세스가 다수의 스레드를 사용 하도록 합니다. child_process 는 새로운 자식 프로세스를 실행 시킵니다.
새로운 프로세스를 실행시키기 때문에 아예 다른 언어를 실행 할 수도 있습니다.
프로세스 생성에는 다음의 두 가지 방법이 있습니다.

  1. 비동기 프로세스 생성
  2. 동기 프로세스 생성

단 자식 프로세스가 실행하고자 하는 프로그램은 설치가 되어있어야 합니다. 이 모듈이 프로그램을 대신 동작하는 것이 아닌, 해당 프로그램이 동작하도록 요청하는 작업을 하기 때문입니다.

비동기 프로세스 생성

비동기 프로세스는 부모 프로세스가 자식 프로세스의 종료를 기다리지 않고 다음 작업을 수행하는 프로세스 입니다.
비동기 프로세스를 생성하는 방법에는 다음과 같은 방법이 있습니다.

  1. exec(command[, options][, callback])
  2. execFile(file[, args][, options][, callback])
  3. fork(modulePath[, args][, options])
  4. spawn(command[, args][, options])

exec(command[, options][, callback])

쉘을 통해 명령어를 실행하고 그 결과를 버퍼(buffer)로 리턴받습니다.

  • command : 실행할 명령어
  • options : 객체로써 전달되며 child_process 모듈에서 지정한 옵션을 지정할 수 있습니다
  • callback : 프로세스 종료 후 호출될 함수
exec의 options 종류
옵션타입설명
cwdstring자식 프로세스의 작업 디렉토리
envObject환경변수. 키-값 의 형태.
기본값 : process.env
encodingstring인코딩.
기본값 : utf8
shellstring명령을 실행할 셸.
기본값
- Unix 운영 체제 => /bin/sh
- 윈도우 운영 체제 => process.env.ComSpec
signalAbortSignalAbortSiganl을 사용하여 자식 프로세스 중단
timeoutnumber종료 시간.
기본값 : 0
maxBuffernumberstdout 혹은 strerr 에서 허용되는 최대 데이터 양(바이트 단위)
값을 초과하면 자식 프로세스가 종료되고 초과된 출력은 잘립니다.
killSignalstring | integer자식 프로세스가 abort 혹은 timeout 등의 이유로 강제 종료 되었을 때 사용할 신호.
기본값 : SIGTERM
uidnumber프로세스의 uid(사용자 ID) 설정
gidnumber프로세스의 gid (그룹 ID) 설정
windowsHideboolean새로운 콘솔 창을 숨깁니다
기본값 : false

execFile(file[, args][, options][, callback])

실행 파일을 실행 합니다. 쉘을 통하지 않습니다. 결과를 버퍼로 받습니다.

  • file : 실행할 파일의 이름이나 경로
  • args : 문자열 인수 목록
  • options : 객체로써 전달되며 child_process 모듈에서 지정한 옵션을 지정할 수 있습니다
  • callback : 프로세스 종료 후 호출될 함수
execFile의 options 종류
옵션타입설명
cwdstring자식 프로세스의 작업 디렉토리
envObject환경변수. 키-값 의 형태.
기본값 : process.env
encodingstring인코딩.
기본값 : utf8
timeouttimeout종료 시간.
기본값 : 0
maxBuffernumberstdout 혹은 strerr 에서 허용되는 최대 데이터 양(바이트 단위)
값을 초과하면 자식 프로세스가 종료되고 초과된 출력은 잘립니다.
killSignalstring | integer자식 프로세스가 abort 혹은 timeout 등의 이유로 강제 종료 되었을 때 사용할 신호.
기본값 : SIGTERM
uidnumber프로세스의 uid(사용자 ID) 설정
gidnumber프로세스의 gid (그룹 ID) 설정
windowsHideboolean새로운 콘솔 창을 숨깁니다
기본값 : false
windowsVerbatimArgumentsboolean인수의 이스케이프 처리 여부
Unix 운영 체제에서는 무시됩니다.
기본값 : false
shellboolean | string명령을 실행할 셸.
기본값
- Unix 운영 체제 => /bin/sh
- 윈도우 운영 체제 => process.env.ComSpec
signalAbortSignalAbortSiganl을 사용하여 자식 프로세스 중단

fork(modulePath[, args][, options])

쉘을 사용하지 않으며 결과를 스트림으로 리턴 받습니다.
주요 특징은 다음과 같습니다.

  • Node.js 전용으로 새로운 Node.js 프로세스를 생성
  • 부모 프로세스와 자식 프로세스 간에 message 이벤트를 통한 통신 가능
fork의 options 종류
옵션타입설명
cwdstring자식 프로세스의 작업 디렉토리
detachedboolean자식 프로세스가 독립적으로 실행되도록 합니다.
기본값 : false
envObject환경변수. 키-값 의 형태.
기본값 : process.env
execPathstring자식 프로세스를 만드는데 사용되는 실행 파일
execArgvsring[]실행 파일에 전달된 문자열 인수 목록
기본값 : process.execArgv
gidnumber프로세스의 gid (그룹 ID) 설정
serializationstring프로세스 간에 주고받는 메세지의 종류
기본값 : json
signalAbortSignalAbortSiganl을 사용하여 자식 프로세스 중단
killSignalstring | integer자식 프로세스가 abort 혹은 timeout 등의 이유로 강제 종료 되었을 때 사용할 신호.
기본값 : SIGTERM
silentbooleanstdout , stderr 이 부모 프로세스와 입출력을 공유할지 여부
기본값 : false
stdioArray | string자식 프로세스와 부모 프로세스 간의 입출력 연결 방법
uidnumber프로세스의 uid(사용자 ID) 설정
windowsVerbatimArgumentsboolean인수의 이스케이프 처리 여부
Unix 운영 체제에서는 무시됩니다.
기본값 : false
timeoutnumber종료 시간.
기본값 : 0

spawn(command[, args][, options])

스트림(stream) 데이터를 리턴 받습니다. 대규모 데이터를 처리하거나 실시간 출력을 모니터링 할 때 유리합니다.

spawn의 options 종류
옵션타입설명
cwdstring자식 프로세스의 작업 디렉토리
envObject환경변수. 키-값 의 형태.
기본값 : process.env
argv0string 
stdioArray | string자식 프로세스와 부모 프로세스 간의 입출력 연결 방법
detachedboolean자식 프로세스가 독립적으로 실행되도록 합니다.
기본값 : false
uidnumber프로세스의 uid(사용자 ID) 설정
gidnumber프로세스의 gid (그룹 ID) 설정
serializationstring프로세스 간에 주고받는 메세지의 종류
기본값 : json
shellboolean | string명령을 실행할 셸.
기본값
- Unix 운영 체제 => /bin/sh
- 윈도우 운영 체제 => process.env.ComSpec
windowsVerbatimArgumentsboolean인수의 이스케이프 처리 여부
Unix 운영 체제에서는 무시됩니다.
기본값 : false
windowsHideboolean새로운 콘솔 창을 숨깁니다
기본값 : false
signalAbortSignalAbortSiganl을 사용하여 자식 프로세스 중단
timeoutnumber종료 시간.
기본값 : 0
killSignalstring | integer자식 프로세스가 abort 혹은 timeout 등의 이유로 강제 종료 되었을 때 사용할 신호.
기본값 : SIGTERM

동기 프로세스 생성

동기 프로세스는 자식 프로세스의 작업이 끝날 때 까지 부모 프로세스가 대기하는 프로세스 입니다.
동기 프로세스 생성 방법은 다음과 같은 방법이 있습니다.

  1. execFileSync(file[, args][, options])
  2. execSync(command[, options])
  3. spawnSync(command[, args][, options])

각각의 함수는 Sync가 빠진 함수와 기능적으로 매칭되며 옵션이 같기 때문에 생략합니다.


참조 : https://nodejs.org/docs/latest/api/child_process.html

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.