如何杀死通过child_process.exec启动的Node.js子进程
解决方法
child_process.exec 调用后会返回一个 ChildProcess 实例,你可以直接调用该实例的 kill() 方法终止进程,默认发送 SIGTERM 信号,如果需要模拟 Ctrl+C 的退出效果,指定发送 SIGINT 信号即可。
修改后的示例代码如下:
const notcp = require("child_process"); // 存储exec返回的子进程实例 const childProcess = notcp.exec("./IAmAnAppThatDoesntJustStop.sh", (error, stdout, stderr) => { // 原有逻辑不变 }); // 需要终止进程时调用以下代码,SIGINT对应Ctrl+C的信号 childProcess.kill('SIGINT');
注意事项
- 如果子进程内部又启动了其他子进程(即存在孙子进程),直接杀父进程可能导致下层进程变成孤儿进程继续运行,如需终止整个进程树:
- Linux/macOS 环境下可以通过杀进程组实现:
process.kill(-childProcess.pid, 'SIGINT') - Windows 环境下可以调用
taskkill命令:notcp.exec(taskkill /T /PID ${childProcess.pid} /F)
- Linux/macOS 环境下可以通过杀进程组实现:
- 调用kill后可以通过
childProcess.killed属性判断是否已经成功触发kill操作。
内容的提问来源于stack exchange,提问作者user11287402
相关产品推荐
相关产品推荐

