为什么不执行 exec(“top”);在 Linux 上工作?

发布于 2024-11-19 15:04:41 字数 164 浏览 1 评论 0原文

我试图执行这个命令

echo exec("top");

,但

echo exec("/usr/bin/top");

都不起作用(返回空白输出)

有人知道为什么吗?

I was trying to execute this command

echo exec("top");

and

echo exec("/usr/bin/top");

neither works (returns blank output)

does anybody know why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

遗弃M 2024-11-26 15:04:41

因为 top 是一个交互式程序,旨在在终端上运行,而不是从脚本执行。您可能想要运行带参数的“ps”命令,该命令将按 CPU 利用率对输出进行排序。
http://www.devdaily.com/linux /unix-linux-process-memory-sort-ps-command-cpu

Because top is an interactive program that is meant to be run on a terminal, not be executed from a script. You are probably want to run the 'ps' command with arguments which will sort output by cpu utilization.
http://www.devdaily.com/linux/unix-linux-process-memory-sort-ps-command-cpu

滴情不沾 2024-11-26 15:04:41

您实际上可以调用 top 并回显其输出。对我有用的代码:

passthru('/usr/bin/top -b -n 1');

-b - 以批处理模式运行

-n 1 - 仅一次迭代

You actually can call top and echo its output. Code that worked for me:

passthru('/usr/bin/top -b -n 1');

-b - running in batch mode

-n 1 - only one iteration

抠脚大汉 2024-11-26 15:04:41

它可能有效,但 exec() 不会返回任何内容。阅读手册: exec()

$output = null;
exec('top', $output);
echo $output;

但是你还有另一个问题:top 不会自行退出。你不能在这里使用它,因为你需要发送中断信号(刚刚意识到:q也可以)。

一种解决方案是使 top 停止一次迭代后

$output = null;
exec('top -n 1', $output);
var_dump($output);

It probably works, but exec() doesn't return anything. Read the Manual: exec()

$output = null;
exec('top', $output);
echo $output;

But you have another problem: top doesn't exit by itself. You cannot use it here, because you need to send the interrupt-signal (just realized: q is ok too).

One solution is to make top to stop after one iteration

$output = null;
exec('top -n 1', $output);
var_dump($output);
撕心裂肺的伤痛 2024-11-26 15:04:41

如果你想把它放在一个变量中:

ob_start();
passthru('/usr/bin/top -b -n 1');
$output = ob_get_clean();
ob_clean();

If you want to put it in a variable :

ob_start();
passthru('/usr/bin/top -b -n 1');
$output = ob_get_clean();
ob_clean();
不气馁 2024-11-26 15:04:41

我用的是:

$cpu = preg_split('/[\s]+/', shell_exec('mpstat 1 1'));
$cpu = 100-$cpu[42];

100%减去空闲时间。

I used:

$cpu = preg_split('/[\s]+/', shell_exec('mpstat 1 1'));
$cpu = 100-$cpu[42];

100% minus the idle time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文