node 的 child_process 的实现原理是什么?为何子进程能之间使用主进程里面的数据?

不是说进程之间的资源无法共享吗,即使要共享也需要使用进程通信的手动吧?

个人对于进程与进程之间的资源共享也只到达这个地步而已。

那么为什么 Node.js child_process 创建出来的进程可以之间拿父进程的数据?

// 父进程
const exec = require('child_process').exec;
const Name = "QQ";
exec('echo hello world', (err, stdout, stderr) => {
    if (err) throw err;
    console.log (Name);    // "QQ"
})

为啥 exec 的回调里面可以获得 主进程的 Name 变量? 难道是 exec 的回调函数又回到父进程了?
对了补充一句,之前我父进程有一个统一处理 error 的函数。 所有主进程的 throw 我都可以捕获并且,进行处理。
但是一旦 exec 里面 throw error。我主进程竟然不能捕获,并且主进程还挂掉了。

阅读 3.7k
3 个回答

exec 的回调当然是在主进程啊...

你要明白fork干了什么,它不是开了一个全新的进程,而是把当前进程复制一遍,包括其状态,所以子进程也有Name这个常量。node.jschild_process我没用过,但我查了一下你这用法不对,execcallback是子进程结束后由父进程执行的,而且由于exec是异步的,你用try-catch肯定是没法捕获错误的,既然callback的第一个参数就给你标志了错误,你就不用再try-catch了,这是js异步函数的基本套路。

fork会把当前进程的状态全部复制一遍吗?我去看下文档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题