簡體   English   中英

如何通過父進程給出的命令中斷 child_process?

[英]How to interrupt child_process by a command given by parent process?

我目前正在處理一個項目,該項目要求用戶單擊“執行”按鈕以調用后端的 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 的任務將在流程結束時輸出所有結果,因此在任務進行期間不會有任何輸出。

用戶界面有一個按鈕,用戶可以在任務執行時取消任務。 我曾嘗試if (cancelFlag) {child.kill('SIGTERM')}后右child_process.spawn ,但它是行不通的。 我想 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM