【发布时间】: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的回答听起来简单多了。 ^^