首页 > 解决方案 > 节点 child_process exec() 使系统崩溃

问题描述

我有一个很大的文件文件夹,我浏览并启动一个 bash shell 命令(它与音频分析有关)。这些命令中的每一个都需要很长时间,并且我的虚拟机的 CPU 很快达到 100% 负载并崩溃。有没有办法控制child_process' 的产生,从而保护操作系统免于崩溃?也许就像在给定时间运行有限的进程池或其他东西......我希望有人对此有经验,因为我在谷歌搜索问题时一无所获:D

我希望这个问题不是太异国情调:) 干杯!

标签: node.jschild-process

解决方案


有没有办法控制 child_process' 的产生,从而保护操作系统免于崩溃?

就在这里。您可以使用某种预先构建的排队系统或作业管理系统,您可以在其中预先配置要同时处理这些不同作业的进程数,或者您自己构建。

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

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

子进程可以为每个作业运行到完成并停止,为每个新的排队项启动一个新进程,或者您可以让它们返回完成通信,但不终止,您可以向它们发送一个新的工作项。

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


推荐阅读