3

使用这些代码之一

system("htop");
//or
exec('htop');

如何防止 htop 的数据被写入文件或其他东西(脚本的时间限制设置为 0 不用担心)

4

4 回答 4

3

htop 是一个交互式程序,它在循环中运行直到退出,并且似乎没有提供任何标志来进行单次迭代然后退出,这使得捕获输出有问题。

你有没有考虑过使用top?您可以使用 -n 1 将其限制为 1 次迭代:

$resp = system("top -n 1");
print $resp; 
于 2013-03-21T03:57:17.993 回答
2

这是另一种解决方案,即使用虚拟终端并进行屏幕截图,然后关闭会话。这是一个不错的技巧,但 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>
于 2016-12-22T03:20:23.353 回答
1

我同意@d_g 的回答,top 是一个旨在在终端中运行的程序。我建议使用 AJAX 频繁更新 top 的输出

此外,我想添加有关该功能的信息passthru()。该函数将 shell 命令的输出直接打印到 php 的标准输出。在外部程序完成之前,您不需要额外的打印和输出。如果命令需要很长时间来处理,这很重要。所以你可以替换:

$resp = system("top -n 1");
print $resp; 

经过

passthru('top -n 1');
于 2013-03-29T14:44:49.340 回答
0

system并将exec命令的结果作为字符串返回。使用fwrite或类似函数将输出保存到文件。

于 2013-03-21T03:04:10.990 回答