【问题标题】:Node.js/electron: How to Identify the process is windows process or other application processNode.js/electron:如何识别进程是windows进程还是其他应用进程
【发布时间】:2018-11-06 22:51:24
【问题描述】:

我正在开发一个提供前 5 个 CPU 使用率应用程序名称的应用程序。目前,我从以下代码中获得了前 5 个应用程序:

    var _ = require('lodash');
    var ps = require('current-processes');

     ps.get(function(err, processes) {

        var sorted = _.sortBy(processes, 'cpu');
        var top5  = sorted.reverse().splice(0, 5); // Top 5 results

        console.log(top5);

    });

输出:在图像中附加 o/p:

我也研究过其他方法:

var exec = require('child_process').exec;
  exec('tasklist', function(err, stdout, stderr) {
    var lines = stdout.toString().split('\n');
    console.log(lines);
  });

输出图像

但我无法确定进程(pid)是 Windows 服务还是其他应用程序。总之,我不想展示任何系统服务。还有其他方法可以识别吗?

【问题讨论】:

  • 看起来你把截图弄混了。
  • @estus 现已修复!

标签: node.js electron child-process


【解决方案1】:

tasklist 是一种可接受的方式。

系统应用和服务可以通过Session NameUsername列过滤掉。

可以使用tasklist帮助包代替手动解析命令输出。

基本上N/A(可以本地化)和NT AUTHORITY\*(可以有本地名称,所以NT AUTHORITY\SYSTEM 不可靠)用户和服务(可能属于上一个类别)应该被过滤掉:

tasklist({ verbose: true })
.then(apps => {
  apps = apps
  .filter(app => app.sessionName !== 'Services')
  .filter(app => /^(?!NT AUTHORITY).+\\/.test(app.username));

  console.log(apps)
})
.catch(console.error);

【讨论】:

  • 我有点迷茫,这些东西应该放在哪里?真的为这样的评论道歉,但我对这件事很陌生,无法得到它。您能否也添加我上面的代码来解释这一点?
  • 如你所说。我也在看会议。如果是系统应用程序则为0,否则为4。我们可以用它来区分吗?
  • 你应该把这个放到你调用代码的地方。 await 应该出现在 async 函数中。如果您没有,您可以使用 IIFE 包装代码:(async () => { ... })().catch(console.error) 或切换到常规承诺。我猜Services 会话名称对应于 0 会话。无论语言环境如何,我都希望它是相同的,但您也可以出于安全考虑使用它。我建议您在superuser.com 解决特定于操作系统的问题。
  • 我收到错误您能否将我的代码与您的代码一起添加并编辑答案?我没有使用“等待”。
  • 我编辑了它。肯定不是。 tasklist 是特定于 Windows 的,问题是关于 windows 进程。如果您在使用其他操作系统,则需要单独处理它们。检查github.com/sindresorhus/ps-list/blob/master/index.js 了解它是如何完成的。基本上它是 windows 的任务列表和 mac 和 linux 的 ps。您可以使用像 npmjs.com/package/ps 这样的助手来避免手动解析 ps 输出。
猜你喜欢
  • 2018-07-26
  • 2011-08-31
  • 2023-04-10
  • 2014-08-18
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 2017-06-01
相关资源
最近更新 更多