node.js中的额外stdio流是否被child_process.spawn阻塞?

时间:2014-07-09 16:33:54

标签: node.js stream pipe nonblocking

使用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上阻塞?

我需要传输大量数据而不会阻止我的工作进程。

相关:

0 个答案:

没有答案