node.js API文档在生成子进程时使用额外的stdio(fd = 4):
// Open an extra fd=4, to interact with programs present a
// startd-style interface.
spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
通过ChildProcess.stdio[fd]
,父进程可以使用该stdio。
子进程如何访问这些额外的stdios?让我们在文件描述符3(fd = 3)上使用流而不是管道。
/* parent process */
// open file for read/write
var mStream = fs.openSync('./shared-stream', 'r+');
// spawn child process with stream object as fd=3
spawn('node', ['/path/to/child.js'], {stdio: [0, 1, 2, mStream] });
答案 0 :(得分:8)
虽然node.js没有在API中记录这一点,但您可以使用fs.read
和fs.write
使用文件描述符的索引号读取/写入这些流。
我没有找到任何检查process
对象的信息,这个对象表明这些stdios可用于子进程,所以据我所知,你将无法检测到这些stdios是否存在可以从孩子那里获得。
但是,如果您确定您的子进程将使用这些stdios生成,那么您可以使用这样的读/写函数:
var fd_index = 3;
fs.write(fd_index, new Buffer(data, 'utf8'), 0, data.length, null, function(err, bytesWritten, buffer) {
if(err) return failure();
else ...
// success
});