You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现进程状态实时监控?含pm2场景及系统API方案咨询

PM2进程实时监控优化方案与系统API调用方法

一、替代轮询pm2 list的更优方案:使用PM2原生API

不用依赖轮询命令行工具,PM2提供了Node.js原生API,支持事件驱动的实时状态推送,比轮询更高效且实时性更强:

核心实现思路

通过PM2的launchBus()方法订阅进程状态变化事件(如进程启动、退出、重启等),当状态发生变更时会主动触发回调,无需定期执行pm2 list。同时也可以主动调用pm2.list()获取当前所有进程的完整状态。

示例代码

const pm2 = require('pm2');

// 连接PM2守护进程
pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(1);
  }

  // 订阅进程状态变更事件
  const eventBus = pm2.launchBus();
  eventBus.on('process:online', (data) => {
    console.log(`[状态更新] 进程 ${data.process.name} 已上线,PID: ${data.process.pid}`);
  });
  eventBus.on('process:exit', (data) => {
    console.log(`[状态更新] 进程 ${data.process.name} 已退出,退出码: ${data.process.exit_code}`);
  });
  eventBus.on('process:restart', (data) => {
    console.log(`[状态更新] 进程 ${data.process.name} 已重启`);
  });

  // 主动获取当前所有PM2进程状态
  pm2.list((err, processes) => {
    if (err) throw err;
    console.log('当前PM2管理的进程列表:', processes.map(p => ({ name: p.name, pid: p.pid, status: p.pm2_env.status })));
  });
});

二、调用操作系统API获取进程状态

完全可以直接调用操作系统原生API获取进程的底层状态,不同系统实现方式不同:

Linux/Unix系统

  • 直接读取/proc虚拟文件系统:每个运行中的进程对应/proc/[PID]目录,其中:
    • /proc/[PID]/stat:包含进程状态(R=运行、S=睡眠、Z=僵尸等)、CPU使用时长、内存占用等核心数据
    • /proc/[PID]/status:更易读的进程状态信息,包含内存、权限等细节
    • /proc/[PID]/cmdline:进程启动时的命令行参数
  • 解析这些文件内容,即可实现对进程状态的实时监控,无需依赖PM2。

Windows系统

  • 使用Windows原生API:通过OpenProcess获取进程句柄,再调用GetProcessTimes、GetProcessMemoryInfo等函数获取CPU、内存等指标;也可以通过WMI(Windows管理规范)查询Win32_Process类获取进程数据。
  • 在Node.js环境中,可使用封装好的第三方库(如windows-process-api)简化API调用,避免直接编写C++代码。

三、综合方案

将PM2 API与系统API结合:

  1. 用PM2 API获取其管理的进程列表及基础状态(如是否在线、重启次数)
  2. 针对每个进程的PID,调用系统API获取更细粒度的底层指标(如实时CPU使用率、内存占用率)
  3. 结合两者的数据,构建完整的进程监控视图

内容的提问来源于stack exchange,提问作者qg_java_17137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:20:12