이 글은 주로 노드의 프로세스와 child_process 모듈에 대한 학습노트를 소개하고 있으니 참고하시기 바랍니다.
일주일 동안 고생한 끝에 드디어 모호하고 어려운 문서를 이해하게 되었습니다. 여러분이 이해한 바를 여러분과 공유할 준비가 되었습니다.
Node.js의 각 애플리케이션은 프로세스 클래스의 인스턴스 객체입니다.
프로세스 객체를 사용하여 애플리케이션을 표현합니다. 이는 Node.jsy 애플리케이션의 속성, 메서드 및 이벤트와 프로그램을 실행하는 사용자 및 환경과 같은 다양한 정보를 얻을 수 있는 전역 객체입니다.
- 프로세스의 여러 중요한 속성
stdin 표준 입력 읽기 가능 스트림
stdout 표준 입력 쓰기 가능 스트림 stderr 표준 오류 출력 스트림 argv 입력 매개변수 배열
env 운영 체제 환경 정보 pid 애플리케이션 프로세스 ID stdin 및 stdout 1 2 3 | process.stdin.on('data', (chunk) => {
process.stdout.write('进程接收到数据' + chunk)
})
|
로그인 후 복사
실행 결과
argv
env : Mac 터미널 Node_env = DEVELOP에 내보내기를 입력합니다.
1 | console.log(process.env.NODE_ENV)
|
로그인 후 복사
프로세스 메소드 
Process.Memoryusage () 메모리 사용량 정보 보기
Process.nextTick () 현재 이벤트루프에서 실행 함수를 실행 Process.chdir () chidir () 사용되는 메소드 Node.js 애플리케이션에서 사용되는 현재 작업 디렉토리 수정 process.cwd() 현재 작업 디렉토리 처리 process.kill() 프로세스 종료 process.uncaughtException() 다음의 uncaughtException 이벤트 애플리케이션이 포착되지 않은 예외를 발생시키면 프로세스 객체가 트리거됩니다.1 2 3 4 | say()
process.on('uncaughtException', function (err){
console.log('捕获到一个未被处理的错误:',err);
});
|
로그인 후 복사
- child_process
오늘의 초점은 제가 잘 이해하지 못하는 부분도 있습니다. you more
child_process의 배경
Node.js에서는 모든 작업을 수행하는 스레드가 단 하나뿐입니다. 작업에 많은 양의 CPU 리소스가 필요한 경우 후속 작업을 기다려야 합니다.
Node.js에는 child_process 모듈이 제공되는데, 이를 통해 여러 자식 프로세스를 시작할 수 있고, 여러 자식 프로세스 간에 메모리 공간을 공유할 수 있으며, 자식 프로세스 간의 상호 통신을 통해 정보 교환이 가능합니다. child_process 모듈은 노드에 마음대로 하위 프로세스를 생성할 수 있는 기능을 제공합니다. 공식 노드 문서는 하위 프로세스를 생성하기 위해 운영 체제에 실제로 매핑되는 child_proces 모듈에 대한 네 가지 방법을 제공합니다. 하지만 개발자의 경우 이들 메소드의 API가 조금 다릅니다
child_process.exec(command[, options][, callback])는
child 프로세스를 시작하여 쉘 명령을 실행하고, 콜백을 통해 스크립트 쉘 실행 결과를 얻을 수 있습니다. 매개변수
child_process.execfile(file[, args][, options][, callback])
exec 유형과 달리 쉘 명령을 실행하지 않고 실행 파일을 실행합니다.
child_process.spawn(command[, args] [, options])는 실행 결과를 가져오지 않고 쉘 명령만 실행합니다.
child_process.fork(modulePath[, args][, options])는 node
를 사용하여 실행 결과를 가져오지 않고 .js 파일을 실행할 수 있습니다. 포크에서 나오는 하위 프로세스는 노드 프로세스
spawn
구문: child_process.spawn(command, [args], [options])
command 지정해야 하는 매개변수, 해당 명령을 지정합니다. 실행해야 합니다
args 배열은 명령을 실행하는 데 필요한 모든 매개변수를 저장합니다 options 매개변수는 하위 프로세스를 시작할 때 사용되는 옵션을 지정하는 데 사용되는 객체입니다.1 2 3 4 5 6 7 8 9 | 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
})
|
로그인 후 복사
실제로 위의 내용은 sdtio 배열만 빼면 이해하기 쉬우니 아래에서 같이 해보자 stdio- stdio
분석 stdio는 표준입력, 표준출력, 에러출력을 설정하는데 사용되는 배열이다. 개인적인 이해
pipe: 상위 프로세스와 하위 프로세스 사이에 파이프라인 구축메인 프로세스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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())
})
|
로그인 후 복사
하위 프로세스 코드
1 | process.stdout.write('asd')
|
로그인 후 복사
stdio, process.stdout, process.stdin
스트림에 넣으면 메인 프로세스 code
1 2 3 4 5 6 7 8 | 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]
})
|
로그인 후 복사
하위 프로세스 코드
1 | process.stdout.write('asd')
|
로그인 후 복사
ipc
메인 프로세스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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')
|
로그인 후 복사
하위 프로세스 코드
1 2 3 4 5 | <strong>process.on('message', (msg) => {
process.send('子进程' + msg)
})
|
로그인 후 복사
분리 모드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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가 하위 프로세스를 시작합니다
하나의 새 노드를 생성합니다. Node.js 프로세스를 실행하고 IPC 통신 채널을 설정하여 지정된 모듈을 호출합니다. 이를 통해 상위 프로세스와 하위 프로세스가 서로 정보를 보낼 수 있습니다
fork 메소드는 하위 프로세스를 나타내는 암시적으로 생성된 ChildProcess 객체를 반환합니다-
자식 프로세스의 입출력 작업이 완료된 후에는 자식 프로세스가 자동으로 종료되지 않습니다. 명시적으로 종료하려면 process.exit() 메서드를 사용해야 합니다. 하위 프로세스 코드1 2 3 4 5 6 7 8 9 10 11 12 13 | 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)
})
|
로그인 후 복사
하위 프로세스 코드
1 2 3 4 | process.on('message', (m, setHandle) => {
console.log('子进程接收到消息' + m)
process.send(m)
})
|
로그인 후 복사
exec가 하위 프로세스를 시작합니다
1 2 3 4 5 6 7 8 9 | let { exec } = require ('child_process')
let path = require ('path')
let p1 = exec ('node exec .js a b c', {cwd: path.join(__dirname, 'childs')}, function (err, stdout, stderr) {
console.log(stdout)
})
|
로그인 후 복사
execFile이 하위 프로세스를 엽니다
1 2 3 4 5 6 7 8 | <strong>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)
})</strong>
|
로그인 후 복사
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
根据vue里面设置全局变量或者数据方法(详细教程)
利用jquery点击回车键实现登录效果(详细教程)
如何在vue2中设置全局变量?(详细教程)
위 내용은 노드에서 process 및 child_process 모듈을 학습하는 방법(자세한 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!