使用这些代码之一
system("htop");
//or
exec('htop');
如何防止 htop 的数据被写入文件或其他东西(脚本的时间限制设置为 0 不用担心)
htop 是一个交互式程序,它在循环中运行直到退出,并且似乎没有提供任何标志来进行单次迭代然后退出,这使得捕获输出有问题。
你有没有考虑过使用top?您可以使用 -n 1 将其限制为 1 次迭代:
$resp = system("top -n 1");
print $resp;
这是另一种解决方案,即使用虚拟终端并进行屏幕截图,然后关闭会话。这是一个不错的技巧,但 top -n 1 在资源使用方面更有效。如果在 redhat/centos 中,你需要做 yum screen。似乎包含在 ubuntu/debian 中。
<?php
`screen -d -m -S htop_session htop`;
sleep(1);
`screen -p 0 -S htop_session -X hardcopy`;
`screen -p 0 -S htop_session -X quit`;
?>
<pre>
<?php print file_get_contents('hardcopy.0'); ?>
</pre>
我同意@d_g 的回答,top 是一个旨在在终端中运行的程序。我建议使用 AJAX 频繁更新 top 的输出。
此外,我想添加有关该功能的信息passthru()
。该函数将 shell 命令的输出直接打印到 php 的标准输出。在外部程序完成之前,您不需要额外的打印和输出。如果命令需要很长时间来处理,这很重要。所以你可以替换:
$resp = system("top -n 1");
print $resp;
经过
passthru('top -n 1');
system
并将exec
命令的结果作为字符串返回。使用fwrite或类似函数将输出保存到文件。