【问题标题】:Node child_process exec() crashes system节点 child_process exec() 使系统崩溃
【发布时间】:2019-07-05 08:39:32
【问题描述】:

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

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

【问题讨论】:

    标签: node.js child-process


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 其实已经绰绰有余了!谢谢,我会进一步调查,或者使用npm 包(如果我找到符合我理解的东西),或者只写我自己的。非常感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 2017-07-23
    • 2020-12-13
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多