{site_name}

{site_name}

🌜 搜索

Node.js 子进程是指通过 Node.js 应用程序生成的独立进程,可以与主进程并行运行,并能相互通信

编程 𝄐 0
node创建子进程,node fork子进程,nodejs多进程,node 进程管理,node单进程,nodejs子进程退出
Node.js 子进程是指通过 Node.js 应用程序生成的独立进程,可以与主进程并行运行,并能相互通信。

Node.js 提供了 child_process 模块来创建子进程。该模块提供了几个函数来启动一个新的子进程,并与之交互:

1. spawn():启动一个新的进程,并将其输出连接到主进程的输入,例如:


const { spawn } = require('child_process');
const child = spawn('ls', ['-lh', '/usr']);

child.stdout.on('data', (data) => {
console.log(child stdout:\n${data});
});

child.stderr.on('data', (data) => {
console.error(child stderr:\n${data});
});

child.on('exit', (code, signal) => {
console.log(child process exited with code ${code} and signal ${signal});
});


上述代码会在当前目录下启动一个子进程,并执行 ls -lh /usr 命令,然后将命令输出打印到控制台。

2. exec():启动一个新的 shell 进程,并在其中运行命令,例如:


const { exec } = require('child_process');

exec('cat *.js | wc -l', (err, stdout, stderr) => {
if (err) {
console.error(exec error: ${err});
return;
}
console.log(Number of lines:\n${stdout});
});


上述代码会在当前目录下启动一个子进程,打开一个 shell 并执行 cat *.js | wc -l 命令,然后返回该命令输出的行数。

3. fork():启动一个新的 Node.js 进程,并在其中运行指定的模块,例如:


// parent.js
const { fork } = require('child_process');
const child = fork('child.js');

child.on('message', (msg) => {
console.log(Message from child: ${msg});
});

child.send('Hello, child!');

// child.js
process.on('message', (msg) => {
console.log(Message from parent: ${msg});
});

process.send('Hello, parent!');


上述代码会在当前目录下启动一个子进程,并在其中运行 child.js 模块。父进程与子进程通过 IPC(进程间通信) 通道相互发送消息。