首页 > 解决方案 > 如何在nodejs上完成child_process?

问题描述

所以,我有一个在 Kubernetes 上运行的节点中提供的服务,我需要每 30 分钟执行一次非常繁重的操作(CRON JOB)。这是我的应用程序上每个租户的一堆数据库操作(目前,5 个租户)。

问题是,如果我在同一个进程上启动所有,即使是异步的,服务会承受过多的负载并崩溃。

因此,我尝试使用 child_process 模块。我的想法是为每个租户创建一个新进程,做它需要做的事情,然后终止该进程。

我正在使用 child_process.fork('heavyLoadFile') 创建子进程。

问题是当工作完成时,CP 并没有被摧毁。他们作为一个“僵尸”过程呆在那里,完全什么都不做。

我试图在 CP 上进行 process.kill() ,但它也杀死了父进程。

我怎样才能只杀死 child_process?哦,你们有没有想出更好的方法来处理这些重物?

标签: node.jsmultithreadingchild-processheavy-computation

解决方案


运行process.kill()会杀死你的主要 NodeJS 应用程序和它可能拥有的任何子应用程序。

您只需要杀死子进程。像这样:

const cp = require("child_process");

// you fork a child (your cron script)
const child = cp.fork("<your program>");

// the rest of your code

// you kill only this child
child.kill();

推荐阅读