Nodejs的process模块如何获取其他进程的pid

Nodejs的process模块如何获取其他进程的pid

我想获取QQ进程的pid,我应该怎么实现呢,我看process.pid只能获取node程序的pid,我怎么查看其他进程的pid

4 回复

Node.js 的 process 模块如何获取其他进程的 PID

问题描述

你希望使用 Node.js 获取其他进程(例如 QQ 进程)的 PID。你已经注意到 process.pid 只能获取当前 Node.js 程序的 PID,并且想要了解如何获取其他进程的 PID。

解决方案

要获取其他进程的 PID,可以使用 Node.js 的 child_process 模块来执行系统命令。不同的操作系统有不同的方法来获取进程信息。以下是针对 Windows 和 Unix 系统的示例。

示例代码

对于 Windows 系统:

const { exec } = require('child_process');

// 使用 tasklist 命令获取所有进程列表
exec('tasklist', (error, stdout, stderr) => {
    if (error) {
        console.error(`执行出错: ${error}`);
        return;
    }
    // 将输出转换为字符串并查找 QQ 进程
    const lines = stdout.split('\n');
    for (let line of lines) {
        if (line.includes('QQ.exe')) {
            const parts = line.trim().split(/\s+/);
            if (parts.length > 1) {
                const pid = parts[1];
                console.log(`QQ 进程的 PID 是: ${pid}`);
                break;
            }
        }
    }
});

对于 Unix 系统(如 Linux 或 macOS):

const { exec } = require('child_process');

// 使用 ps 命令获取所有进程列表
exec('ps -ax | grep "QQ"', (error, stdout, stderr) => {
    if (error) {
        console.error(`执行出错: ${error}`);
        return;
    }
    // 将输出转换为字符串并查找 QQ 进程
    const lines = stdout.split('\n');
    for (let line of lines) {
        if (line.includes('QQ')) {
            const parts = line.trim().split(/\s+/);
            if (parts.length > 1) {
                const pid = parts[0];
                console.log(`QQ 进程的 PID 是: ${pid}`);
                break;
            }
        }
    }
});

解释

  • child_process.exec: 该函数用于执行外部命令。
  • stdout: 包含外部命令的标准输出。
  • stderr: 包含外部命令的标准错误输出。
  • tasklist (Windows): 列出当前运行的所有进程及其 PID。
  • ps -ax | grep "QQ" (Unix): 列出所有包含 “QQ” 字样的进程。

通过执行这些命令,我们可以捕获其输出并解析以找到所需进程的 PID。


var cmd=process.platform=='win32'?'tasklist':'ps aux';
var exec = require('child_process').exec;
var qqname='qq';
exec(cmd, function(err, stdout, stderr) {
    if(err){ return console.log(err); }
    stdout.split('\n').filter(function(line){
        var p=line.trim().split(/\s+/),pname=p[0],pid=p[1];
        if(pname.toLowerCase().indexOf(qqname)>=0 && parseInt(pid)){
            console.log(pname,pid);
        }
    });
});

这是win系统的,pid第二列,进程名第一列。如果unix系统,自行修改(pid在第一列,进程名在最后一列)

非常感谢呀

要获取其他进程(如 QQ 进程)的 PID,你可以使用 Node.js 的 child_process 模块结合操作系统的命令来实现。以下示例展示了如何在不同的操作系统中获取特定进程的 PID。

示例代码

在 Linux 或 macOS 上

const { exec } = require('child_process');

function getProcessPid(processName) {
    return new Promise((resolve, reject) => {
        exec(`pgrep ${processName}`, (error, stdout, stderr) => {
            if (error) {
                reject(new Error(`Error: ${stderr}`));
                return;
            }
            const pid = stdout.trim();
            resolve(pid);
        });
    });
}

getProcessPid('qq').then(pid => {
    console.log(`PID of QQ process: ${pid}`);
}).catch(error => {
    console.error(error.message);
});

在 Windows 上

const { exec } = require('child_process');

function getProcessPid(processName) {
    return new Promise((resolve, reject) => {
        exec(`tasklist /FI "IMAGENAME eq ${processName}"`, (error, stdout, stderr) => {
            if (error) {
                reject(new Error(`Error: ${stderr}`));
                return;
            }
            const lines = stdout.split('\n');
            for (let line of lines) {
                if (line.includes(processName)) {
                    const parts = line.trim().split(/\s+/);
                    const pid = parts[1];
                    resolve(pid);
                    break;
                }
            }
            if (!pid) {
                reject(new Error(`Process ${processName} not found.`));
            }
        });
    });
}

getProcessPid('qq.exe').then(pid => {
    console.log(`PID of QQ process: ${pid}`);
}).catch(error => {
    console.error(error.message);
});

解释

  • exec 函数用于执行操作系统命令。
  • 在 Linux 或 macOS 上,使用 pgrep 命令来查找指定进程名的 PID。
  • 在 Windows 上,使用 tasklist 命令来查找指定进程名的 PID。
  • 将这些命令的输出捕获并解析为所需的 PID。
  • 最终将找到的 PID 返回给调用者。

这样你就可以通过 Node.js 获取到 QQ 进程的 PID 了。

回到顶部