node.js - 执行错误:错误:如果在节点 js 上使用 child_process,则超出标准输出 maxBuffer
问题描述
我想在 Linux 上使用top
with不断地从监控进程和系统资源使用情况中获取数据child_process.exec
。
代码 :
const { exec } = require('child_process');
exec('top', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log('stdout', stdout);
console.log('stderr', stderr);
});
如果我运行上面的代码,我会得到一个错误exec error: Error: stdout maxBuffer exceeded
我正在使用 Node.js 版本 v8.9.4
top
是否可以使用命令从命令中连续获取数据child_process.exec
?
解决方案
exec()
会缓冲stdout
。
生成一个 shell,然后在该 shell 中执行命令,缓冲任何生成的输出。
(来自文档。)
当top
在没有进一步参数的情况下启动时,它会尝试重绘终端的某些部分。我不知道你来了这么远。在我的系统上,您的代码失败并显示:
顶部: tty 获取失败
您需要告诉top
以批处理模式运行,以便每次更新时它都会完全转储其当前状态。
exec('/usr/bin/top -b', ...);
尽管由于top
将无限期地转储状态,但缓冲区最终仍会溢出。-n #
您可以使用开关限制更新次数或使用spawn()
:
const { spawn } = require("child_process");
// Note: -b for batch mode and -n # for number of updates
let child = spawn("/usr/bin/top", ["-b", "-n", "2"]);
// Listen for outputs
child.stdout.on("data", (data) => {
console.log(`${data}`);
});
使用data
子进程流上的侦听器,stdout
您可以及时观察数据。
推荐阅读
- python - 字节中的语法错误(" ".format(), encoding="utf-8")
- mongodb - 无法使用 Mongoose 中间件删除 Mongoose 文档
- regex - 正则表达式,查找时区 UTC 时区除外,当两者都可用时
- xml - 我们如何使用 1.0 版加入 XPATH?
- c++ - VS 2019 中未显示 Direct3D Win32 游戏模板
- python - pygraphviz 或 networkx:获取给定节点的所有子图的名称
- python - 如何添加一个列来计算是否至少有一条记录?
- git - 将 Overleaf 项目的 Git 推送到除 master 之外的其他分支
- javascript - 如何在 reactjs 中获取图像 api?
- wcf - 客户端代理建立双工 TCP 连接。只能制作5个代理客户端实例