node.js 如何通过进程名称检查进程是否正在运行?

新手上路,请多包涵

我在 linux 中运行 node.js,从 node.js 如何从进程名称检查进程是否正在运行?最坏的情况我使用 child_process,但想知道是否有更好的方法?

谢谢 !

原文由 user3552178 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.7k
2 个回答

您可以使用 ps-node 包。

https://www.npmjs.com/package/ps-node

 var ps = require('ps-node');

// A simple pid lookup
ps.lookup({
    command: 'node',
    psargs: 'ux'
    }, function(err, resultList ) {
    if (err) {
        throw new Error( err );
    }

    resultList.forEach(function( process ){
        if( process ){
            console.log( 'PID: %s, COMMAND: %s, ARGUMENTS: %s', process.pid, process.command, process.arguments );
        }
    });
});

我相信你会看到这个例子。查看该站点,它们还有很多其他用途。试试看。

万一您没有绑定到 nodejs,您也可以从 linux 命令行执行 ps -ef | grep "YOUR_PROCESS_NAME_e.g._nodejs" 来检查正在运行的进程。

原文由 Samuel Toh 发布,翻译遵循 CC BY-SA 3.0 许可协议

d_scalzi 回答的代码略有改进。使用回调而不是承诺的功能,只有一个变量查询和开关而不是 if/else。

 const exec = require('child_process').exec;

const isRunning = (query, cb) => {
    let platform = process.platform;
    let cmd = '';
    switch (platform) {
        case 'win32' : cmd = `tasklist`; break;
        case 'darwin' : cmd = `ps -ax | grep ${query}`; break;
        case 'linux' : cmd = `ps -A`; break;
        default: break;
    }
    exec(cmd, (err, stdout, stderr) => {
        cb(stdout.toLowerCase().indexOf(query.toLowerCase()) > -1);
    });
}

isRunning('chrome.exe', (status) => {
    console.log(status); // true|false
})

原文由 musatin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题