Nodejs 怎么才可以获得 top命令的结果
Nodejs 怎么才可以获得 top命令的结果
我是新手,想通过获取控制台输出,实现对server的监控,在mac机上用child_process 无法获得top命令的结果,总是提示 error: initializing curses,这是怎么回事?如何解决?谢谢!!
var spawn = require(‘child_process’).spawn, //com = spawn(‘iostat’,[’-w 1 | less -S’]);这个命令执行正常,可以得到结果 com = spawn(’/usr/bin/top’, []); //总是提示 error: initializing curses var io = require(‘socket.io’).listen(5555); com.stdout.on(‘data’, function(data){ io.sockets.emit(‘get result’, data); } );
com.stderr.on(‘data’, function(data){ console.log('stderr: ’ + data);
});`
我搜了下有人也遇到同样的问题,但是不知道解决了没,供大家参考 http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/24248
当然,我可以帮助你解决这个问题。在Mac OS上使用top
命令时遇到的错误通常是由于top
命令试图初始化一个交互式的界面,而这种界面不适用于非交互式环境(如Node.js中的子进程)。为了解决这个问题,你可以使用top
命令的批处理模式或使用其他替代工具来获取系统资源使用情况。
解决方案
使用 top
的批处理模式
你可以尝试使用top
命令的批处理模式,这将返回一个静止的输出,而不是交互式界面。你可以通过添加-l 1 -n 1
选项来实现这一点,这样top
命令只会运行一次并返回结果。
var spawn = require('child_process').spawn;
var com = spawn('/usr/bin/top', ['-l 1', '-n 1']);
com.stdout.on('data', function(data) {
console.log('stdout: ' + data.toString());
});
com.stderr.on('data', function(data) {
console.log('stderr: ' + data.toString());
});
com.on('close', function(code) {
console.log('Child process exited with code ' + code);
});
使用 ps
和 awk
命令
如果你只需要CPU和内存的使用情况,可以使用ps
命令结合awk
来获取这些信息:
var spawn = require('child_process').spawn;
var com = spawn('/bin/sh', ['-c', 'ps -eo %cpu,%mem,command | sort -nrk 1 | head -n 5']);
com.stdout.on('data', function(data) {
console.log('stdout: ' + data.toString());
});
com.stderr.on('data', function(data) {
console.log('stderr: ' + data.toString());
});
com.on('close', function(code) {
console.log('Child process exited with code ' + code);
});
这段代码会返回CPU使用率最高的前5个进程的信息。
解释
spawn
函数用于创建一个新的子进程。-l 1 -n 1
参数使top
命令只运行一次并返回结果。ps -eo %cpu,%mem,command | sort -nrk 1 | head -n 5
这段命令用于获取CPU使用率最高的前5个进程的信息。on('data')
监听器用于捕获子进程的标准输出和标准错误输出。on('close')
监听器用于监听子进程退出事件。
希望这能解决你的问题!如果还有其他疑问,请随时提问。
topn -cbn 1
MacOS没这条命令吧
楼主给出的链接里面,老外已经明确的给出了答案,试过了没
var top = spawn('/usr/bin/top', [], {customFds: [process.stdin.fd, -1,-1]});
试过了不行。手头没有linux机器,不知道在linux下”top -b“ 可行
我在ubuntu下试了,可以的.