我正在尝试使用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' }
我感谢建议的可能解决方案。提前致谢。
答案 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}'