节点child_process exec()使系统崩溃

时间:2019-07-05 08:39:32

标签: node.js child-process

我有一个很大的文件文件夹,我会逐步浏览并启动bash shell命令(与音频分析有关)。这些命令每个都花费很长时间,并且我的虚拟机的CPU很快达到了100%的负载,并且崩溃了。有没有一种方法可以控制child_process'的生成,从而防止操作系统崩溃?也许像是在给定的时间或某些时间运行有限的进程池...我希望有人对此有所了解,因为在搜索问题时我什么都没找到:D

我希望这个问题不要太奇怪了:)干杯!

1 个答案:

答案 0 :(得分:1)

  

是否有一种方法可以控制child_process的生成,从而保护操作系统免于崩溃?

是的,有。您可以使用某种预先建立的排队系统或工作管理系统,在其中预先配置要一次处理这些不同工作的多少个进程,也可以自己构建。

与此处有关stackoverflow的所有问题一样,如果包括您现在的实际代码,您将得到一个针对特定情况的更具体的答案。但是,一般的概念是您创建一个工作队列。您可以决定一次要处理多少个流程。当您将某些内容添加到队列中时,您将检查已运行了多少个进程。如果最大值已经在运行,则只需将任务添加到队列中。

如果尚未运行最大进程数,则创建一个新进程,将其从队列中最旧的项传递给它,并增加一个计数器,以跟踪当前打开了多少个子进程(或工作进程)。您监视每个过程,以便知道何时完成。每当完成时,您不仅要处理结果,还要修改计数器以运行多少个进程,然后,如果没有达到最大值,则获取队列中的下一个作业并为其启动子进程。'

子进程既可以运行到每个作业的完成并停止,可以为每个新排队的项目启动一个新的子流程,也可以让他们传达回完成的信息,但不能终止并可以向他们发送新的工作项。

npm中有许多这样的作业管理或工人管理软件包,或者您可以很简单地构建自己的软件包。我个人会抓取一个已经编写的库,但是每个现有库对任务的适用性取决于您尚未共享的具体实现细节。