如何通过父进程发出的命令中断子进程



我目前正在处理一个项目,该项目需要用户单击"执行"按钮来调用后端的子进程,以执行耗时的任务。代码如下,

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.spawn之后尝试过if (cancelFlag) {child.kill('SIGTERM')},但它不起作用。我想child_process需要一个监听器

非常感谢您的建议。

child_process.spawn在中止进程的选项中接受signal和killSignalkillSignal默认为SIGTERM,前面的解决方案回答

但这里有一个信号中止控制器的例子

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

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

然而,在Windows上,SIGTERM仅可用于侦听,默认情况下没有任何行为https://nodejs.org/api/process.html#signal-事件。

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

最新更新