本篇对Node child_process进行深入了解,child_process开启子进程的方法有exec、execFile、spawn、fork。
注意事项
jsexec('cat read.txt',(error, stdout, stderr)=>{
if (error) {
console.error(`执行的错误: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
})
jsexecFile('cat',['read.txt','>','a.txt'],(error, stdout, stderr)=>{
if (error) {
throw error;
}
console.log('stdout',stdout);
console.log('stderr',stderr);
})
jsconst { spawn } = require('child_process');
const ps = spawn('ps', ['ax']);
const grep = spawn('grep', ['ssh']);
ps.stdout.on('data', (data) => {
grep.stdin.write(data);
});
ps.stderr.on('data', (data) => {
console.error(`ps stderr: ${data}`);
});
ps.on('close', (code) => {
console.log('ps close')
if (code !== 0) {
console.log(`ps 进程退出,退出码 ${code}`);
}
grep.stdin.end();
});
grep.stdout.on('data', (data) => {
console.log(data.toString());
});
grep.stderr.on('data', (data) => {
console.error(`grep stderr: ${data}`);
});
grep.on('close', (code) => {
console.log('grep close')
if (code !== 0) {
console.log(`grep 进程退出,退出码 ${code}`);
}
});
js// parent.js
const { fork } = require('child_process');
const child = fork('./child.js');
child.on('message', (message) => {
console.log(`Received message from child: ${message}`);
});
child.send('Hello from parent');
// child.js
process.on('message', (message) => {
console.log(`Received message from parent: ${message}`);
process.send('Hello from child');
});
detached:true
使子进程脱离父进程。jssetInterval(() => {
console.log('父进程')
},2000)
const subprocess = spawn('node', ['detached.js'], {
detached: true,
stdio: 'ignore'
});
subprocess.unref();
// detached.js
setInterval(()=>{
console.log('子进程')
},1000)
本文作者:BARM
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!