这是我正在做的事情的主旨:https://gist.github.com/MattCollins84/75f9ebd422ed6d1d5c91
作为某个过程的一部分,我生成一个bash脚本,其中包含一堆curl命令(大约20k命令)。我想通过节点运行这个脚本。
我正在使用spawn来做到这一点,它工作正常。除了在70左右的命令后,它才会停止。由spawn创建的读取流停止输出任何数据。就我所见,没有任何错误或任何错误。
如果我执行“ps x | grep curl”来查看正在发生的事情,我可以看到进程id最初正在改变,但它似乎只是在某一点停止并且永远不会再次启动。这个过程刚刚挂起。手动杀死此进程不会让下一个进程开始。此外,与我的bash脚本相关的过程仍然存在,再次,杀死没有任何区别。
观察和我排除的事情:
我觉得我遗失了一些愚蠢的东西,但我不知道谷歌要弄清楚什么!
我只是希望运行这个文件,好像我在终端上一样,但是看起来Node有一些限制来阻止它失去控制。或者其他什么。
任何想法?! 感谢
答案 0 :(得分:2)
虽然我不熟悉Node的spawn函数,但我熟悉Unix管道。这听起来像在你的第一个场景中,你运行的程序产生了输出但你的程序没有读取该输出。当管道缓冲区已满时,您执行的程序将阻止尝试写入它。当程序从管道中读取时,它将被解锁。
您找到的解决方案(stdio: 'inherit'
)可能会告诉函数使用相同的stdout,stderr和stdin流运行子进程。因此,您的程序不需要从管道读取,因为它不是管道。您执行的程序然后写入终端,该终端读取输出,因此它不会阻塞。
答案 1 :(得分:1)