{ 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}`)
})
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}`)
})
const { execFile } = require('child_process')
execFile('file', ['arg1', 'arg2'], (err, stdout, stderr) => {
// ...
})
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")
ChildProcess obj에서 emit된 다양한 evt를 listen
할 수 있다.
stdio
stream이 닫히면 emit const process = spawn('ls')
process.on('exit', (code, signal) => {
console.log(`Child process exited w/ code ${code}, signal ${signal}`)
})