NodeJS 如何杀死子进程

mwkjh3gx  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(259)

有没有一种方法可以杀死一个使用exec启动的子进程?信不信由你,并不是所有的应用程序都只是 * 结束 *(比如ls),但会继续,除非你使用control-c快捷方式退出它们。有没有一种方法可以通过代码来复制它。我想扼杀这个过程。下面是一些初始化进程的代码,如果这有帮助的话。

const notcp = require("child_process");
notcp.exec("./IAmAnAppThatDoesntJustStop.sh", (error, stdout, stderr) => {
// 
});
5f0d552i

5f0d552i1#

如果你执意要使用.exec()来执行你的脚本,那么没有no (easy) built-in的方法来结束你刚刚启动的进程。如果您比较灵活,可以使用.spawn()函数,情况会发生变化,您可以 checkout the following question/answer on Stackoverflow
如果您仍然想使用.exec(),可以尝试使用TaskkillFkill等库来简化实现此类功能的复杂性?

0tdrvxhp

0tdrvxhp2#

对我来说,杀死.exec()子进程唯一有效的方法是在尝试使用kill的每一个信号都不起作用后使用npm库terminate。但是terminate做到了。具体操作如下:

const terminate = require('terminate')
terminate(myProcess.pid, err => console.log(err))

其中myProcess简单地是:const myProcess = childProcess.exec(...)。您不需要在子进程上使用{ detached: true },这不是必要的。
您可以使用以下命令安装terminate:yarn add terminate(这不是我的项目)
这一招非常有效。

相关问题