nodejs spawn kill 子进程没有被关问题解决

在执行 一个spawn 命令的时候,这个spawn 命令又可能执行了一些其它程序,但是kill的时候命令启动的子进程总是没有被执行,https://github.com/nodejs/node/issues/2098 中的解决办法我尝试了,但是还是没有用。
在 https://www.npmjs.com/package/node-process-watcher 库中我添加了一个结束子进程的方法。这个库目前只支持 linux和windwos。
安装 npm i node-process-watcher
使用:

const {node_process_watcher} = require("node-process-watcher");
node_process_watcher.kill_process(1234,true); // 杀死 1234 包括他的 的所有子进程

### Node.js 中的进程管理 在 Node.js 中,`child_process` 模块提供了多种方法来创建、监控以及终止子进程。以下是于如何进行这些操作的具体说明。 #### 创建子进程 要创建一个子进程,可以使用 `child_process.spawn()` 或者 `child_process.exec()` 方法。其中,`spawn` 更适合长时间运行的任务,而 `exec` 则适用于短时间任务并返回整个输出结果。 ```javascript const { spawn } = require('child_process'); const child = spawn('node', ['app.js']); child.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); child.stderr.on('data', (data) => { console.error(`stderr: ${data}`); }); ``` 上述代码展示了如何通过 `spawn` 启动一个新的 Node.js 应用程序实例[^1]。 #### 监控子进程 为了确保子进程正常运行并且能够在异常情况下自动恢复,通常会监听子进程的状态变化事件,比如 `'exit'`, `'error'` 和 `'close'` 等。 ```javascript child.on('exit', (code, signal) => { console.log(`Child process exited with code ${code} and signal ${signal}`); // 可在此处重新启动子进程以实现守护功能 }); ``` 如果希望进一步增强稳定性,可考虑引入第三方库 pm2 来代替手动编写复杂的逻辑[^4]。 #### 终止子进程 当不再需要某个特定的子进程时,可通过调用 `.kill([signal])` 方法向该进程发送信号从而优雅地结束它。 ```javascript if (!child.killed) { child.kill(); // 默认发送 'SIGTERM' } ``` 此外,在多核环境下利用 cluster 模块能够更高效地分配资源给不同的 worker processes,进而提高整体系统的吞吐量[^3]。 #### 多进程间的通讯机制 对于复杂的应用场景而言,仅依靠简单的父子系可能不足以满足需求;此时就需要借助 IPC(Inter-process Communication)通道来进行更加深入的信息交换[^2]。 ```javascript // Master 发送消息至 Worker process.send({ action: 'startTask' }); // Worker 接收来自 Master 的指令 process.on('message', msg => { if (msg.action === 'startTask') { performTask(); } }); ``` 以上便是有Node.js 下进程管理的一些基本概念和技术要点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值