如何通过父进程给出的命令中断child_process?

How to interrupt child_process by a command given by parent process?

我目前正在做一个项目,该项目要求用户单击 'execute' 按钮以在后端调用 child_process 来执行一项耗时的任务。代码如下,

let child = child_process.spawn(//args);
let data = '';
let err = '';
for await(const chunk of child.stdout) {
  data += chunk;
}
for await(const chunk of child.stderr) {
  err += chunk;
}
return {"out": data, "err": err};

此处省略解码。 child_process 的任务将在流程结束时输出所有结果,因此在任务进行期间不会有任何输出。

并且用户界面有一个按钮供用户在任务执行时取消任务。我在 child_process.spawn 之后尝试了 if (cancelFlag) {child.kill('SIGTERM')},但它不起作用。我想 child_process?

需要一个 listener

非常感谢您的任何建议。

如果您使用的是 POSIX 系统,则默认情况下向子进程发送 SIGTERM 应该会终止该进程。

但是,在 Windows 上,SIGTERM 仅可用于监听,默认情况下没有任何行为 https://nodejs.org/api/process.html#signal-events

如果您在 Windows 上编程,您应该能够为 SIGTERM 信号添加监听器

child_process.spawn 在中止进程的选项中接受信号和 killSignal killSignal默认是SIGTERM,前面回答中描述的解决方法

但这里有一个带有 信号 中止控制器

的示例
let abortController = new AbortController();
let child = ChildProcess.spawn("sleep", ["1"], {
  signal: abortController.signal,
});
setTimeout(() => {
  abortController.abort();
}, 300);