{ console.log(`stdout : ${data}`) }) ``` 2. exec shell을 생성하고, 커맨드를 실행한다. ``` js const { exec } = require("child_process") exec('ls -lh /usr', (err, stdout, stderr) => { if (err) { console.error(`Error: ${error}`) return } console.log(`stdout : ${stdout}`) console.log(`stderr : ${stderr}`) }) ``` 3. execFile exec과 비슷하지만 shell을 생성하고 cmd를 입력하는게 아닌 cmd를 직접적으로 생성해 조금 더 효율적으로 동작한다. 실행가능한 파일을 실행하는데 더 적합하다. ``` js const { execFile } = require('child_p"> { console.log(`stdout : ${data}`) }) ``` 2. exec shell을 생성하고, 커맨드를 실행한다. ``` js const { exec } = require("child_process") exec('ls -lh /usr', (err, stdout, stderr) => { if (err) { console.error(`Error: ${error}`) return } console.log(`stdout : ${stdout}`) console.log(`stderr : ${stderr}`) }) ``` 3. execFile exec과 비슷하지만 shell을 생성하고 cmd를 입력하는게 아닌 cmd를 직접적으로 생성해 조금 더 효율적으로 동작한다. 실행가능한 파일을 실행하는데 더 적합하다. ``` js const { execFile } = require('child_p"> { console.log(`stdout : ${data}`) }) ``` 2. exec shell을 생성하고, 커맨드를 실행한다. ``` js const { exec } = require("child_process") exec('ls -lh /usr', (err, stdout, stderr) => { if (err) { console.error(`Error: ${error}`) return } console.log(`stdout : ${stdout}`) console.log(`stderr : ${stderr}`) }) ``` 3. execFile exec과 비슷하지만 shell을 생성하고 cmd를 입력하는게 아닌 cmd를 직접적으로 생성해 조금 더 효율적으로 동작한다. 실행가능한 파일을 실행하는데 더 적합하다. ``` js const { execFile } = require('child_p">
# child_process (nodejs)

nodejs에서 child process는 서브프로세스를 생성하고 그들과 상호작용하는

기능을 제공하는 모듈이다.

nodejs로 다른 app/service와 상호작용하거나 시스템 커맨드를 nodejs로 실행해야할 때 유용하다.

## 1. methods
1. spawn
새로운 프로세스를 생성하고 커맨드를 호출하는데 사용한다.
`ChildProcess` 객체를 반환하며, stream(`stdin`, `stdout`, `stderr`)에도 접근 가능하다.
프로세스가 오랜 시간 작동하고, 이에 상호작용해야 할 때 사용한다.

``` js
    const { spawn } = require("child_process")
    const ls = spawn("ls", ["-lh", "/usr"])
    
    ls.stdout.on("data", (data) => {
        console.log(`stdout : ${data}`)
    })
  1. exec shell을 생성하고, 커맨드를 실행한다.
    const { exec } = require("child_process") 
    
    exec('ls -lh /usr', (err, stdout, stderr) => {
        if (err) {
            console.error(`Error: ${error}`)
            return
        }
        console.log(`stdout : ${stdout}`)
        console.log(`stderr : ${stderr}`)
    })
  1. execFile exec과 비슷하지만 shell을 생성하고 cmd를 입력하는게 아닌 cmd를 직접적으로 생성해 조금 더 효율적으로 동작한다. 실행가능한 파일을 실행하는데 더 적합하다.
    const { execFile } = require('child_process')
    
    execFile('file', ['arg1', 'arg2'], (err, stdout, stderr) => {
        // ...
    })
  1. fork spawn의 특이한 케이스로, 새로운 nodejs process를 생성할 때 사용된다. 생성된 ChildProcess는 추가적인 커뮤니케이션 채널이 존재해 parent와 child간 메시지를 주고받을 수 있도록 해준다.
    const { fork } = require("child_process")
    const child = fork('some_script.js')
    
    child.on('message', (msg) => {
        console.log(`parent received msg : ${msg}`)
    })
    
    child.send("Hi from parent")

2. Event Handling

ChildProcess obj에서 emit된 다양한 evt를 listen할 수 있다.

    const process = spawn('ls')
    
    process.on('exit', (code, signal) => {
        console.log(`Child process exited w/ code ${code}, signal ${signal}`)
    })