在Node.js中运行带有“spawn”的bash脚本似乎暂停执行一半

下面是我在做什么的要点: https : //gist.github.com/MattCollins84/75f9ebd422ed6d1d5c91

作为一些进程的一部分,我生成了一个bash脚本,里面有大量的curl命令(大约20k个命令)。 我想通过节点运行这个脚本。

我正在使用spawn来做到这一点,它工作正常。 除了70多个命令之后,它就停止了。 由spawn创build的readstream停止输出任何数据。 没有错误,或者任何我能看到的东西。

如果我用“ps x | grep curl”来查看发生的事情,我可以看到进程id刚开始改变,但是似乎在某个时刻停止了,从此再也不会启动了。 这个过程只是挂起。 手动杀死这个过程不会让下一个开始。 此外,与我的bash脚本有关的过程仍然存在,再次,杀死没有任何区别。

观察和我排除的事情:

  • 使用最less的资源
  • 在terminal上运行生成的bash脚本正常工作
  • 似乎并不重要,我curl的URL(即它不是我的应用程序)

我觉得我有一些愚蠢的东西,但是我不知道该怎么去Google弄明白!

我只是希望运行这个文件,就好像我在terminal上一样,但是Node出现了一些限制,以防止它失控。 或者其他的东西。

有任何想法吗?! 谢谢

尽pipe我不熟悉Node的spawn函数,但我对Unixpipe道很熟悉。 这听起来像在你的第一个场景中,你运行的程序产生的输出,但你的程序没有读取输出。 当pipe道缓冲区已满时,您执行的程序将阻止尝试写入该程序。 当程序从pipe道读取时,它将被解除阻塞。

您find的解决scheme( stdio: 'inherit' )可能会告诉函数使用相同的stdout,stderr和stdinstream运行subprocess。 因此,您的程序不需要从pipe道读取,因为它不是pipe道。 您执行的程序然后写入到读取输出的terminal,因此不会被阻止。

正如mattCi在他的评论中指出的, { stdio: 'inherit' }解决了这个问题。