【问题标题】:Running 'top' command of linux for few minutes and then come out of system command in perl运行 linux 的“top”命令几分钟,然后在 perl 中退出系统命令
【发布时间】:2014-04-25 08:36:39
【问题描述】:

我是 Perl 的新手。我正在开发一个 Web UI,我必须在其中提供 CPU 和内存监控数据,所以我使用 top 和 gnuplot 命令。我可以通过我的终端来做到这一点。但是当我使用 perl 脚本执行相同的命令时,它不起作用。我遇到的问题是,每当我在终端中执行 top 命令时,我都必须等待几分钟,然后我必须使用 GNUPLOT 来绘制它,但是当我在 perl 中使用系统命令做同样的工作时,我无法给这个延迟。

这就是我正在做的事情

system "top -p 1758 -b -d5 | tee -a stats.log";
system "./top_stats.sh -f stats.log"

这里 1758 是应用程序 ID,它的主要数据是我必须监控的,而 stats.log 文件是我保存日志的位置,然后将此 stats.log 文件用作我正在绘制图形的 top_stats.sh 脚本的输入。此 top_stats.sh 脚本获取日志文件并使用 gnuplot 绘制数据

现在的问题是,每当我在终端中执行第一个系统命令时,我必须等待一段时间,比如 2 到 3 分钟才能获得足够数量的数据点,然后我必须按 Ctrl+C 才能退出顶部命令,然后运行脚本。但是在这里,一旦遇到第一个系统命令,它就会被执行,然后下一个命令会立即执行,所以我没有得到任何数据点来绘制图表。有什么办法可以执行我的第一个命令并等待 3 分钟而不退出系统命令,然后执行下一个命令。??

【问题讨论】:

  • 在其末尾添加一个 & 符号,使其在后台运行。
  • 你可以fork,让子进程执行 top 命令,而父进程等待 3 分钟,然后杀死子进程。但是skwllsp的回答听起来简单多了。 ^^

标签: linux perl


【解决方案1】:

有什么方法可以执行我的第一个命令并等待 3 分钟而不退出系统命令,然后执行下一个命令。??

为什么不指定top 的迭代次数。因此,您的命令将粗略地运行 (N-1)*5 秒。以 5 秒为间隔的 37 次迭代将需要 36*5 秒:

system "top -p 1758 -b -d5 -n37 | tee -a stats.log && ./top_stats.sh -f stats.log";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多