Hello, Android!

자식 프로세스 본문

Node

자식 프로세스

lwndnjs93 2021. 1. 30. 20:23

thread모듈을 사용하여 워커 스레드를 만들수도 있지만

child_process를 활용하면 자식 프로세스를 만드는것도 가능하다

즉 노드에서 다른 프로그램을 실행하여 그 결과를 받는것이 가능하다

 

크게 child_process의 exec와 spawn이 있다

exec의 매개변수로 원하는 명령어를 넣으면 해당 명령어를 실행한다

이번에는 윈도우 cmd에서 현재 실행중인 프로세스 목록을 보는 tasklist를 사용하였다

만약 리눅스 환경이라면 ps 명령어를 사용하면 될 것이다

실행 결과는 성공하면 stdout의 data이벤트 리스너에

실패하면 stderr의 data이벤트 리스너에 전달된다

 

이번에는 spawn을 사용하여 외부의 파이썬 파일을 호출하였다

파이썬 파일에는 print("Hello, python!!") 즉 Hello, python!! 를 반환한다

spawn의 첫번째 매개변수는 명령어, 두번재는 옵션 배열을 넣는다

세번째 매개변수로 {shell: true}를 넣으면 셸 명령을 수행한다

 

그렇다면 exec와 spawn의 차이점은 무엇일까?

기본적으로 보기에는 둘의 작업은 동일하게 보이지만

spawn은 스트림을 반환하고 exec는 버퍼를 반환한다

스트림이기 때문에 이미지, 바이너리 등의 많은 양의 데이터를 읽는데 유용하며

spawn이 비동기로 실행이 되며 그 결과도 비동기로 받게된다

 

exec는 자식 프로세스의 버퍼를 반환한다

버퍼의 기본 사이즈는 200k 이며 이보다 큰 값을 반환하면 Error: maxBuffer exceeded가 발생하며

프로그램이 종료된다

이는 버퍼 크기를 늘리면 해결이 가능하다

그런 경우에는 spawn을 사용하는것이 좋다

 

즉 큰 데이터를 받는 경우에는 spawn, 간단한 데이터만 받는 경우에는 exec를 사용하면 된다

 

'Node' 카테고리의 다른 글

Promise  (0) 2021.02.01
파일 입출력  (0) 2021.01.31
thread  (0) 2021.01.30
crypto 모듈  (1) 2021.01.26
exports와 require  (0) 2021.01.26