首页 > 解决方案 > 如何在 10 秒后杀死 node.js 中的子进程?

问题描述

我正在制作一个在线代码运行器,它运行良好,但是当它运行到无限循环时它并没有停止,所以如果它执行超过 10 秒,我想杀死这个子进程。10s后如何杀死exec进程?

export const javascriptExecuter = (data, input) => {
  return new Promise((resolve, reject) => {
    const fileName = "code.js";

    saveFile(fileName, data).then(() => {
      fs.writeFile("jsinput.txt", input, (err) => {
        if (err) {
          reject("internal server error ...");
        }
      });
    });

    setTimeout(() => {
       // I WANT TO KILL THE PROCESS AFTER 10 SEC IF IT IS RUNNING **********
    }, 10000);

    exec("node " + fileName + " < " + "jsinput.txt", (err, stdout, stderr) => {
      if (err) {
        resolve({
          err: true,
          output: err,
          error: stderr,
        });
      }
      resolve({
        err: false,
        output: stdout,
      });
    });
  });
};

标签: javascriptnode.jschild-process

解决方案


exec有一个timeout可以用于此的选项(请参阅文档)。无需特殊代码:

exec("node " + fileName + " < " + "jsinput.txt", {timeout: 10000},
  (err, stdout, stderr) => { ... });

推荐阅读