【问题标题】:Have forked child process not stop when parent stops NodeJS当父停止NodeJS时,分叉子进程不会停止
【发布时间】:2021-04-24 02:35:49
【问题描述】:

所以我有一些东西可以创建一个包含 setTimeout 的子进程。我为 setTimeout 传递了一个数字,但问题是当父母退出时,孩子死了。我需要孩子活着,即使父母死了。我该怎么做?

父文件(mute.js)

const muteTiming = fork("timeHandler/timeMute.js");
...
muteTiming.send(mutedTime)
muteTiming.on("message", (msg) => {
  if (msg === "All done!"){
    member.roles.remove(mutedRole);
  }
 });

子进程(timeMute.js)

process.on("message", (msg) => {
  let mutedTime = msg;
  try {
    console.log("Started mute on child!");
    let checkDone = false;
    setTimeout(() => {
      process.send("All done!");
      checkDone = true;
      console.log("Done!");
    }, mutedTime);
    while (checkDone === false) {
      setTimeout(() => {
        console.log("Not done yet...");
      }, 5000);
    }
  } catch (error) {
    console.log(`Uh Oh! The child spit out an error. Here it is! ${error}`);
  }
});

我试过了

    while (checkDone === false) {
      setTimeout(() => {
        console.log("Not done yet...");
      }, 5000);
    }

但这并不能让它保持活力。有什么我应该做的吗?

另外,我尝试过 spawn。它不适用于我需要做的事情。至少据我所知。我需要传递一些东西给它。

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    处理子进程有不同的方法。使用spawn 创建一个新进程,其中可以send 消息。这个链接是一个很好的入门:

    https://www.freecodecamp.org/news/node-js-child-processes-everything-you-need-to-know-e69498fe970a/

    如果使用 Windows,请注意 process.kill,因为它处理信号的方式不同。

    【讨论】:

    • 我试过 spawn,但它没有做我需要做的事情。我需要能够向子进程发送参数,但据我所知,我不能用 spawn 做到这一点。
    • 请阅读链接的文章。可以send 向衍生进程发送消息。
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多