node 의 process 및 childprocess 모듈 학습 노트
8538 단어 nodeprocesschild process
프로 세 스 개념
stdin 표준 입력 읽 을 수 있 는 흐름stdout 표준 입력 쓰기 가능 흐름stderr 표준 오류 출력 흐름
argv 단말기 입력 매개 변수 배열
env 운영 체제 환경 정보
pid 응용 프로그램 프로 세 스 idstdin 및 stdout
process.stdin.on('data', (chunk) => {
process.stdout.write(' ' + chunk)
})
실행 결과argv
console.log(process.env)
env:mac 터미널 에 export NODE 입력ENV=develop
console.log(process.env.NODE_ENV) //develop
프로 세 스 방법process.memory Usage()메모리 사용 정보 보기
say() //
process.on('uncaughtException',function(err){
console.log(' :',err);
});
child_process하위 프로 세 스 는 오늘 이야기 할 중점 입 니 다.저도 잘 모 르 겠 습 니 다.여러분 과 많은 교 류 를 하고 싶 습 니 다.
child_process 가 나타 난 배경
Node.js 에 서 는 하나의 스 레 드 만 이 모든 작업 을 수행 합 니 다.만약 에 특정한 작업 이 CPU 자원 을 대량으로 소모 해 야 할 경우 후속 작업 은 기 다 려 야 합 니 다.
Node.js 에서 child 를 제공 합 니 다.process 모듈 은 여러 개의 키 프로 세 스 를 열 수 있 고 여러 개의 키 프로 세 스 사이 에 메모리 공간 을 공유 할 수 있 으 며 하위 프로 세 스 의 상호 통신 을 통 해 정보의 교환 을 실현 할 수 있 습 니 다.
child_process 모듈 은 node 에 게 하위 프로 세 스 를 임의로 만 드 는 능력 을 줍 니 다.node 공식 문 서 는 childproces 모듈 은 운영 체제 에 비 치 는 네 가지 방법 을 제 시 했 습 니 다.모두 하위 프로 세 스 를 만 드 는 것 입 니 다.그러나 개발 자 에 게 만 이 몇 가지 방법의 api 는 약간 다르다.
child_process.exec(command[,options][,callback])시작
하위 프로 세 스 는 셸 명령 을 실행 합 니 다.스 크 립 트 셸 실행 결 과 를 리 셋 매개 변 수 를 통 해 가 져 올 수 있 습 니 다.
child_process.execfile(file[, args][, options][, callback])
exec 형식 과 달리 셸 명령 이 아 닌 실행 가능 한 파일 을 실행 합 니 다.
child_process.spawn(command[,args][,options])은 셸 명령 만 수행 할 뿐 실행 결 과 를 가 져 올 필요 가 없습니다.
child_process.fork(modulePath[,args][,options])node 사용 가능
실 행 된.js 파일 도 실행 결 과 를 가 져 올 필요 가 없습니다.fork 에서 나 온 하위 프로 세 스 는 node 프로 세 스 일 것 입 니 다.
spawn
문법:childprocess.spawn(command, [args], [options])
const { spawn } = require('child_process')
const path = require('path')
let child1 = spawn('node', ['test1.js', 'yanyongchao'], {
stdio: ['pipe', 'pipe', 'pipe'], //
cwd: __dirname,
env: process.env,
detached: true // true,
})
사실 위 에 서 는 sdtio 배열 을 제외 하고 stdio 를 분석 하 겠 습 니 다.stdio
stdio 는 표준 입력,표준 출력,오류 출력 을 설정 하 는 배열 입 니 다.개인 적 이해
pipe:부모 프로 세 스 와 하위 프로 세 스 사이 에 파 이 프 를 만 듭 니 다.
주 프로 세 스 코드
const path = require('path')
const { spawn } = require('child_process')
let p = spawn('node', ['childs_t.js'], {
cwd: path.join(__dirname, 'childs'),
stdio: ['pipe', 'pipe', process.stderr]
})
p.stdout.on('data', (data) => {
console.log(data.toString())
})
// stdout : ,
// stdin: ,stdout、stderr: 。
하위 프로 세 스 코드
process.stdout.write('asd')
stdio 에 흐름 을 넣 으 면 process.stdout,process.stdin주 프로 세 스 코드
const { spawn } = require('child_process')
const path = require('path')
// ,
const p = spawn('node', ['child_t.js'], {
cwd: path.join(__dirname, 'childs'),
stdio: [process.stdin, process.stdout, process.stderr]
})
하위 프로 세 스 코드
process.stdout.write('asd') // asd
ipc주 프로 세 스 코드
const path = require('path')
const { spawn } = require('child_process')
let p = spawn('node', ['child_t.js'], {
cwd: path.join(__dirname, 'childs'),
stdio: ['ipc', 'pipe', 'pipe']
})
p.on('message', (msg) => {
console.log(msg)
})
p.send('hello chhild_process')
하위 프로 세 스 코드
process.on('message', (msg) => {
process.send(' ' + msg)
})
// child.send(message,[sendHandle]);//
// process.send(message,[sendHandle]);//
detached 모드
const { spawn } = require('child_process')
const fs = require('fs')
const path = require('path')
let out = fs.openSync(path.join(__dirname, 'childs/msg.txt'), 'w', 0o666)
let p = spawn('node', ['test4.js'], {
detached: true, // ,
stdio: 'ignore',
cwd: path.join(__dirname, 'childs')
})
p.unref()
p.on('close', function() {
console.log(' ')
})
p.on('exit', function() {
console.log(' ')
})
p.on('error', function(err) {
console.log(' 1 ' + err)
})
fork 키 프로 세 스 열기
const { fork } = require('child_process')
const path = require('path')
let child = fork(path.join(__dirname, 'childs/fork1.js'))
child.on('message', (data) => {
console.log(' ' + data)
})
child.send('hello fork')
child.on('error', (err) => {
console.error(err)
})
하위 프로 세 스 코드
process.on('message', (m, setHandle) => {
console.log(' ' + m)
process.send(m) //sendHandle net.Socket net.Server
})
exec 하위 프로 세 스 열기
// exec shell
let { exec } = require('child_process')
let path = require('path')
// shell ,
let p1 = exec('node exec.js a b c', {cwd: path.join(__dirname, 'childs')}, function(err, stdout, stderr) {
console.log(stdout)
})
execFile 하위 프로 세 스 열기
let { execFile } = require('child_process')
let path = require('path')
let p1 = execFile('node', ['exec.js', 'a', 'b', 'c'], {
cwd: path.join(__dirname, 'childs')
}, function(err, stdout, stderr) {
console.log(stdout)
})
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express.js에서 오류를 처리하는 간단한 방법Express에서 오류를 처리하는 여러 가지 방법이 있습니다. 이를 수행하는 일반적인 방법은 기본 익스프레스 미들웨어를 사용하는 것입니다. 또 다른 방법은 컨트롤러 내부의 오류를 처리하는 것입니다. 이러한 처리 방식...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.