stdio
进程:执行一个应用程序,就会启动一个进程,操作系统会为其分配内存空间、系统资源。
应用程序执行完毕后,系统分配给进程的资源就会被回收。
课堂演示
进程之间是可以通信的。那这里有一个最基本的要求:进程不能结束。如何让进程不结束?
想想微信、QQ启动后为啥不结束?
因为要监听。

这里也同样,只要进程处于监听状态,就不会结束。
// 监听输入
process.stdin.on("data", () => {});
除此之外,一个进程还可以启动另一个进程,这在操作系统中是非常常见和常用的行为,被称之为 父子进程模型。
控制台其实也是一个应用程序,启动后也会有进程。因此下面的代码:
node index.js
控制台就是父进程,node程序就是子进程。

stdio: standard input and output 标准输入输出
每一个进程启动后,都会留出两个对外通信的接口:
- 标准输入接口:standard in
- 标准输出接口:standard output
上面进程监听输入和对外输出的图,就可以变成这样:


const { spawn } = require("child_process");
// 启动 server.js 子进程
const serverProcess = spawn("node", ["server.js"]); // node server.js
// 监听服务端的响应
// 数据从哪里来?哪个进程给我的
// 数据会输出到哪儿?我给哪个进程
serverProcess.stdout.on("data", (data) => {
process.stdin.write(data.toString()); // 🙋 往哪里输出?
});
// 发送几条测试消息
const messages = ["生命有意义吗?", "宇宙有尽头吗?", "再见!"];
messages.forEach((msg, index) => {
setTimeout(() => {
console.log(`-->${msg}`);
serverProcess.stdin.write(msg);
}, index * 1000); // 每秒发一条
});

stdio通信高效、简洁,但仅适用于本地进程间通信




