如何在nodejs上完成child_process?

问题描述

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

问题是,如果我在相同的进程上启动所有服务,即使是异步的,服务也将陷入过多的负载并崩溃。

因此,我尝试使用child_process模块​​。我的想法是为每个租户创建一个新流程,执行所需的操作,然后终止该流程。

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

问题在于,完成工作后,CP不会被销毁。他们像僵尸一样呆在那里,什么也不做。

我尝试在CP上使用process.kill(),但它也会杀死父进程。

我怎样才能只杀死child_process? 哦,你们是否想出一种更好的方法来处理这种沉重的负担?

解决方法

运行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();