使用spawn()创建子进程时,可以通过options.stdio
参数传递选项以创建多个流。在标准3(stdin,stdout,stderr)之后,您可以传递额外的流和管道,这将是子进程中的文件描述符。然后你可以使用fs.createRead / WriteStream来访问它们。
请参阅http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
var opts = {
stdio: [process.stdin, process.stdout, process.stderr, 'pipe']
};
var child = child_process.spawn('node', ['./child.js'], opts);
但是文档并不清楚这些管道阻塞的位置。我知道stdin / stdout / stderr正在阻塞,但是'pipe'
&#39>呢?
他们在一个部分说:
"请注意父和子的send()方法都是 同步 - 不建议发送大块数据(管道可以 相反,请参阅child_process.spawn"
但在其他地方他们说:
process.stderr和process.stdout与Node中的其他流不同 写入它们通常是阻止的。
They are blocking in the case that they refer to regular files or TTY file descriptors. In the case they refer to pipes: They are blocking in Linux/Unix. They are non-blocking like other streams in Windows.
有人可以澄清一下吗?管道是否在Linux上阻塞?
我需要传输大量数据而不会阻止我的工作进程。
相关: