使用节点child_process.exec执行top命令时如何解决错误?

How to resolve the error while executing top command using node child_process.exec?

我正在尝试使用 node.js 执行一堆 bash 命令。我使用 child_process.exec 来执行命令。

var child_process = require('child_process');
child_process.exec("ps -p $(lsof -ti tcp:8088) o pid=,comm=",function(err,stdout, stderr){
    if(err){
            console.log('error',err);
            return;
    }
    console.log('stdout', stdout);
});

这将列出端口 8088 中的进程 ID 运行 以及名称。以类似的方式,当我尝试使用进程 ID 执行 top 命令以检查 cpu 和内存利用率时。我遇到了一个错误。

var execTop = function(pid){
        child_process.exec("top -p 12769", function(err, stdout, stderr){
                if(err){
                        console.log('error',err);
                        return;
                }
                console.log("top output",stdout);
        })
} 

我在网上找不到太多资源来澄清这个问题。实际错误是

error { [Error: Command failed: /bin/sh -c top -p 12769
top: failed tty get
]
  killed: false,
  code: 1,
  signal: null,
  cmd: '/bin/sh -c top -p 12769' }

我很欣赏建议的可能解决方案。提前致谢。

如果你真的想运行这样top,你需要运行在里面"Batch Mode",比如:

top -b -n 1 -p 12345

这是因为 top 通常是一个交互式命令,需要一个实际的终端来写入。您可能需要考虑使用 ps u -p 12345 之类的东西来获得更简洁的输出。

正如 Grisha 所建议的那样,使用 'Batch Mode',如果只需要 cpu 和内存,对于默认的顶级输出,我会使用类似的东西:

top -b -n 1 -p 12345 | awk '{if(NR>7)print ,}'