在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ node 的 child_process 的實(shí)現(xiàn)原理是什么?為何子進(jìn)程能之間使用

node 的 child_process 的實(shí)現(xiàn)原理是什么?為何子進(jìn)程能之間使用主進(jìn)程里面的數(shù)據(jù)?

不是說(shuō)進(jìn)程之間的資源無(wú)法共享嗎,即使要共享也需要使用進(jìn)程通信的手動(dòng)吧?

個(gè)人對(duì)于進(jìn)程與進(jìn)程之間的資源共享也只到達(dá)這個(gè)地步而已。

那么為什么 Node.js child_process 創(chuàng)建出來(lái)的進(jìn)程可以之間拿父進(jìn)程的數(shù)據(jù)?

// 父進(jìn)程
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 的回調(diào)里面可以獲得 主進(jìn)程的 Name 變量? 難道是 exec 的回調(diào)函數(shù)又回到父進(jìn)程了?
對(duì)了補(bǔ)充一句,之前我父進(jìn)程有一個(gè)統(tǒng)一處理 error 的函數(shù)。 所有主進(jìn)程的 throw 我都可以捕獲并且,進(jìn)行處理。
但是一旦 exec 里面 throw error。我主進(jìn)程竟然不能捕獲,并且主進(jìn)程還掛掉了。

回答
編輯回答
慢半拍

fork會(huì)把當(dāng)前進(jìn)程的狀態(tài)全部復(fù)制一遍嗎?我去看下文檔

2017年3月14日 11:13
編輯回答
眼雜

exec 的回調(diào)當(dāng)然是在主進(jìn)程啊...

2017年8月26日 23:19
編輯回答
溫衫

你要明白fork干了什么,它不是開了一個(gè)全新的進(jìn)程,而是把當(dāng)前進(jìn)程復(fù)制一遍,包括其狀態(tài),所以子進(jìn)程也有Name這個(gè)常量。node.jschild_process我沒用過(guò),但我查了一下你這用法不對(duì),execcallback是子進(jìn)程結(jié)束后由父進(jìn)程執(zhí)行的,而且由于exec是異步的,你用try-catch肯定是沒法捕獲錯(cuò)誤的,既然callback的第一個(gè)參數(shù)就給你標(biāo)志了錯(cuò)誤,你就不用再try-catch了,這是js異步函數(shù)的基本套路。

2017年11月6日 12:06