如何通过父进程给出的命令中断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);
我目前正在做一个项目,该项目要求用户单击 '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?
非常感谢您的任何建议。
如果您使用的是 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);