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

时间:2018-08-17 23:23:44

标签: javascript node.js bash shell child-process

我正在尝试使用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' }

我感谢建议的可能解决方案。提前致谢。

2 个答案:

答案 0 :(得分:3)

如果您真的想像这样运行top,则需要在“批处理模式”下运行,例如:

top -b -n 1 -p 12345

这是因为top通常是一个交互式命令,并且希望有一个实际的终端要写入。您可能要考虑使用ps u -p 12345之类的内容,以获得更简洁的输出。

答案 1 :(得分:3)

如Grisha所建议的那样,使用“批处理模式”,如果仅需要CPU和内存,则默认的顶部输出将使用类似以下内容:

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