鍍金池/ 問(wèn)答/HTML/ 請(qǐng)問(wèn)在 node.js 中父進(jìn)程如何與子進(jìn)程進(jìn)行通信,非fork形式

請(qǐng)問(wèn)在 node.js 中父進(jìn)程如何與子進(jìn)程進(jìn)行通信,非fork形式

我現(xiàn)在有一個(gè)node-webkit項(xiàng)目,需要通過(guò)node的child_process來(lái)啟動(dòng)第二個(gè)NW實(shí)例,所用的方法是child_process.spawn()。

我在網(wǎng)上查了很多資料,大部分是說(shuō)的使用fork()方法的情況下,子進(jìn)程可以通過(guò)send()來(lái)像父進(jìn)程發(fā)送消息,但是spawn()方式下不會(huì)建立ipc通道,也就沒(méi)有send方法。通過(guò)在option中添加stdio:['ipc']也不行,一瞬間cpu到99%,然后子進(jìn)程報(bào)錯(cuò)沒(méi)有process.send()方法。

請(qǐng)問(wèn)該如何實(shí)現(xiàn)兩個(gè)進(jìn)程間的通信呢?

創(chuàng)建子進(jìn)程的代碼如下:

let proc = cp.spawn('../nw',['../static' ,'--user-data-dir','../userdata', ],{
        detached: true,
        // stdio:['ipc'] :無(wú)效
    })
    
回答
編輯回答
兮顏

查了下文檔,stdio 的參數(shù)形式是有些“坑”的

  1. 如果是字符串形式,只接受這三個(gè)值,pipe,ignore,inherit
  2. 如果是數(shù)組形式,就得根據(jù)需要,分別指定 stdin, stdout, stderr

ipc 不屬于情況1,而且你用的是數(shù)組形式,stdout 不指定的話或者指定為 null/undefined,則使用的是默認(rèn)值 pipe

所以問(wèn)題是否在于 stdio 只定義對(duì)了輸入,沒(méi)定義對(duì)輸出呢

2018年5月6日 17:38